0

Stack Overflow フォーラムは初めてです。fortify スキャンの問題の修正について質問があります。

HP Fortify スキャンで、次のコードのリソース インジェクションの問題が報告されました。

String testUrl = "http://google.com";
URL url = null;

try {
   url = new URL(testUrl);
} catch (MalformedURLException mue) {
   log.error("MalformedUrlException URL " + testUrl + " Exception : " + mue);
}

上記のコードでは、行 => url = new URL(testUrl);でリソース注入を表示することを強化します。

この問題を修正するために、ESAPI を使用して URL 検証のコードを次のように変更しました。

String testUrl = "http://google.com";
URL url = null;

try {
   String canonURL = ESAPI.encoder().canonicalize(strurl, false, false);
   if(ESAPI.validator().isValidInput("URLContext", canonURL, "URL", canonURL.length(), false)) {
       url = new URL(canonURL);
   } else {
       log.error("In Valid script URL passed"+ canonURL);
   }
} catch (MalformedURLException mue) {
   log.error("MalformedUrlException URL " + canonURL + " Exception : " + mue);
}

ただし、それでも Fortify スキャン レポートはエラーとして報告されます。この問題は修正されていません。何か間違っていますか?

どんな解決策も大いに役立ちます。

ありがとう、

マリムトゥM

4

3 に答える 3

2

ここでの本当の問題は、URL の形式が正しくない可能性があることではなく、URL が有効なサイトを参照していない可能性があることだと思います。より具体的には、悪者である私があなたの URL に私の Web サイトを指すように仕向けることができた場合、あなたは私の場所からテストされていないデータを取得し、私はあなたのシステムを侵害するために使用される可能性のあるデータを返すことができます。これを使用して、ボブを善人のように見せる「ボブ・ザ・バッド・ガイ」のレコードを返すと言うこともできます。

あなたのコードでは、文字列にハードコードされた値を設定していないと思われます。これは通常、次のような言葉で記述されているためです。

ファイル名やポート番号などのリソースを定義するためのユーザー入力をアプリケーションが許可する場合、このデータを操作して、さまざまなリソースを実行またはアクセスできます。

( https://www.owasp.org/index.php/Resource_Injectionを参照)

適切な応答は、次の組み合わせになると思います。

  1. ユーザーから結果を取得するのではなく、入力を使用して独自の内部リストから選択します。

  2. 値が信頼できるソースからのものであると主張します。たとえば、厳密に管理されたデータベースまたは構成ファイルから読み取ります。

警告を削除する必要はありません。リスクを理解していることを示し、ケースで値を使用してもよい理由を示す必要があります。

于 2014-05-23T19:07:19.537 に答える
0

これは Andrew の回答に便乗していますが、Fortify が警告している問題は、ユーザーによる URL の制御です。アプリケーションが後でその Web サイトに接続することを決定し、それが信頼されていない場合、これは問題です。

これがパブリック URI の共有を重視するアプリケーションである場合は、リスクを受け入れるよりも、固有のリスクについてユーザーが適切にトレーニングされていることを確認する必要があります。また、これらの URL を再表示する場合は、誰かが悪意のあるデータを埋め込もうとしないでください。

于 2016-02-10T12:53:26.537 に答える