安全な Web アプリの作成
Web アプリのデプロイに関連する潜在的なリスクのほとんどは、各アプリのコードに起因します。アプリが使用する機能を制限し、以下に記載する安全なコーディング方法に従うことで、アプリケーションに対する潜在的なリスクを軽減できます。
認証および承認
アプリが機密データへのアクセスを必要とする場合や、潜在的に危険なアクションを実行する場合は、独自の認証および承認スキームの実装を検討します。ネットワーク セキュリティ グループに相談し、アドバイスを求めてください。
Vault への秘密鍵の格納
MATLAB® Vault にシークレットを格納して、パスワードなどの機密情報をコードから削除できます。デプロイでのシークレットの使用の詳細については、Handle Sensitive Information in Deployed Applicationsを参照してください。
MATLAB Web App Server™ には、認証されたユーザーがサーバーの Vault からシークレットを取得できるようにするアクセス制御ルールを定義するための機能が用意されています。シークレットのアクセス制御を有効にする方法の詳細については、MATLAB Web App Server でのシークレット アクセスの制御 (MATLAB Web App Server)を参照してください。
eval()
を呼び出さない
MATLAB の関数 eval()
は、テキスト文字列をコマンドに変換します。この強力な関数を使用すると、ユーザーは任意の MATLAB コードを実行できます。すると、このコードによって、低特権ユーザーが使用できるインストール済みプログラムの実行や、低特権ユーザーがアクセスできるファイルやデータへのアクセスが可能になります。Web デプロイおよびアクセス用に作成されたアプリケーションには、eval()
への呼び出しを含めてはなりません。Web アプリ コードから eval()
を削除する方法については、関数 eval の代替方法を参照してください。入力をサニタイズすることで、eval()
の間接的な呼び出しのリスクを軽減できます。ユーザー入力のサニタイズ (MATLAB Web App Server)を参照してください。
フリーテキストのユーザー入力の制限
アプリのユーザー インターフェイスでは、編集可能なテキスト フィールドの代わりに、メニュー、スライダー、ダイヤル、ボタンを使用します。この方法では、ユーザー エクスペリエンスが向上するだけでなく、ユーザーが提供できる入力の種類が制限され、そのような入力がもたらす可能性があるリスクも軽減されます。
ユーザー入力のサニタイズ
セキュリティの専門家の間では、ユーザー入力はハッカーがよく利用する攻撃ベクトルであるため、ユーザーが提供したデータは信頼できないとみなされます。アプリがフリーテキスト入力を受け入れる必要がある場合、アプリはコード インジェクション攻撃 (アプリに入力をデータではなくコマンドとして強制的に解釈させる特殊文字が含まれるテキスト) の可能性がないか入力を慎重に調べる必要があります。
MATLAB において、コード インジェクション攻撃が最も行われやすいのは、XML、JSON、SQL、および他の同様の構造化された入力です。アプリが構造化された入力を受け入れる場合は、入力のサニタイズ方法について、IT またはセキュリティ グループに相談し、アドバイスを求めてください。ユーザーが任意のタイプのコード (MATLAB、Java®、または JavaScript® など) を直接入力してすぐに評価できるようにしないでください。
ファイルから読み取ったデータのサニタイズ
ファイルからデータを読み取ると、アプリは対話的にユーザー入力を収集する場合と同様のリスクにさらされます。同じ対応策が適用されます。また、読み取り専用のデータ ファイルは、暗号化された安全なハッシュ アルゴリズムでファイルのデジタル フィンガープリントを作成することにより、改ざんから保護できます。
ファイル システムの書き込み操作の最小化
アプリケーションのアクセスを読み取り専用に制限すると、アプリケーションに関連する潜在的なリスクが大幅に軽減されます。ファイル システムに書き込む必要がある場合、複数のユーザーが同時にアクセスすると、サーバーはアプリケーションの複数のコピーを同時に実行することに留意してください。実行時に生成される一意のファイル名を使用するか、一般的に複数の同時アクセスを処理できるデータベースを使用して、同時書き込みを管理する必要があります。同時書き込みが適切に管理されていないと、データが破損する可能性があります。
サードパーティ コードの信頼性の検証
サードパーティが開発した MATLAB ファイル、共有ライブラリ、Java クラス、またはその他のタイプのコードがアプリに含まれている場合、そのコードにウイルス、ワーム、トロイの木馬、その他の Web ベースの攻撃ベクトルや侵入ベクトルが存在しないことを確認する必要があります。この問題については、コードの作成者や IT セキュリティ担当者と話し合ってください。バイナリまたは Java クラスの場合は、デプロイされたアプリにコードを含める前に、コードに対してウイルス検索プログラムまたはその他のセキュリティ ソフトウェアを実行することを検討してください。
エクスポージャー レベルの軽減
エクスポージャーを軽減するには、アプリの実行時間を必要なときだけに限定することも 1 つの方法です。たとえば、デスクトップから継続的に実行しないようにします。