0

Fortify 静的コード分析を使用してソフトウェアを分析しています。Fortify は、クロス サイト スクリプティングの脆弱性があると報告しています (反映されています)。

安全であることを顧客に納得してもらうために (監査が必要なため、誰もやりたがらないことです)、Fortify を喜ばせるために、その点について顧客と議論することができます。

ASP.NET のリクエストからフォーム パラメータを取得し、「手動で」(API を使用せずに) エスケープします (改行、\ 文字、引用符をエスケープし、スクリプト タグを削除します)。次に、それをブラウザにダンプします

output.Write("var enteredText = \"" + htmlEscape( Form.Params["enteredText"] ) +"\"");

私がしない限り、不平を言います

output.Write("var enteredText = \"" + htmlEscape( HttpUtility.HtmlEncode(Form.Params["enteredText"]) ) +"\"");

しかし、これは、Javascript var 'enteredText' を使用するには、Javascript を使用して HTML デコードする必要があることを意味します。この状況での <> とエンティティのエンコードとデコード全体は冗長ですよね?

どうすれば Fortify をなだめることができますか?

4

2 に答える 2

1

アプリケーションが、enteredText フィールドで任意の JavaScript を許可し、ブラウザで JavaScript として実行する場合、実際に反射型クロスサイト スクリプティングの脆弱性があり、非常に深刻です。ユーザーがアプリケーションに対して (たとえば、スピア フィッシング攻撃を使用して) 投稿を作成する可能性がある人は、ユーザーに対してあらゆる種類の騒乱を引き起こす可能性があります。これは非常に単純な攻撃です。

したがって、修正は次のいずれかです

  • このenteredTextフィールドでJavaScript(およびHTMLとCSS)を拒否します。または、これによりアプリケーションが壊れる場合:

  • EnteredText フィールドに実行可能コードが必要なユース ケースを確認し、許容値をホワイトリストに登録します。JavaScript の場合、ページの書き換えを引き起こす可能性のあるものはすべて拒否します。たとえば、OnLoad() のイベント ハンドラー、document.body.innerHTML (たとえば)、またはユーザーのブラウザーのリダイレクトです。
    また、リモート サーバーに投稿できるものはすべて拒否します (フォーム、img、css タグなど)。あなたが暗示しているように、これは多くのコードになる可能性があります。

これは簡単な例にすぎません。クロス サイト スクリプティング攻撃で使用できるタグとイベント ハンドラーのタイプを調査する必要があります。EnteredText フィールドでそれらを拒否しないと、脆弱性が残ります。

お役に立てれば。幸運を。

于 2014-06-10T15:42:24.423 に答える
0

申し訳ありませんが、IE8/javascript スタックがあり、anwser が切り捨てられました。私が言おうとしたことは次のとおりです。

「出力をサニタイズする」が htmlEscape() 関数を意味する場合、通常、エスケープはクロスサイト スクリプティングの脆弱性に対処しません。クロスサイト スクリプティングは、ホワイトリストの検証によってのみ防ぐことができ、Fortify の調査結果は正当化されます。ここで、htmlEscape が問題を解決する場合 (たとえば、出力をエスケープする以上のことを行う場合)、Fortify がそのコードを見つけられるようにするか、この呼び出しを持つ脆弱性を無視するように Fortify で「clense ルール」を記述します。

Fortify と MetaSploit を使用して重要なソフトウェアをスキャンするお客様が増えています。あなたの痛みが分かります。

于 2014-07-08T19:45:13.057 に答える