0

ASP.NET (fw 3.5) サイトを作成しましたが、脆弱性があるかどうかを確認したいと考えていました。

テキストボックスからの入力を受け入れてデータベースに保存し、後で別のページに動的に表示します。

入力しようとすると<script>...</script>、global.asax が例外をキャッチし、メッセージが表示されます。<>A potentially dangerous Request.Form value was detected from the client (TextBox1="<b> asd</b> ").

次に、これを試しました:&ltscript&gt$(window).load(function(){alert('hello');});&lt/script&gtこれは同じ方法でdbに挿入されましたが、ページに<script>$(window).load(function(){alert('hello');});</script>.

ただし、アラート ボックスは表示されません。スクリプトはページ上にそのまま印刷されます。レンダリングされる HTML は次のとおりです。

<td style="font-size: 16px;" colspan="2"><script>$(window).load(function(){alert('hello');});</script></td>

私の質問は、なぜこのスクリプトが実行されないのですか? つまり、クロス サイド スクリプティング攻撃について読んでいて、自分のサイトを安全にしたいと思っていたので、これは素晴らしいことです。現在はそのように動作していますが、なぜそうでないのか理解できません。このような攻撃を阻止するコードは何もありません。

前もって感謝します。

4

1 に答える 1

2

ASP.NET Webforms では、既定でRequest Validationが有効になっているため、例外が発生します。リクエストの検証を避けるために入力すると、javascript として解釈されないhtml エンティティとして解釈されます。

つまり、html エンティティは html タグをエスケープする方法であるため、html 予約文字を html として解釈されることなくレンダリングできます。(改行などの "\n" に似ています)

デフォルトでは、多くの WebForms コントロールはテキスト値を自動的に Html エンコードします。これにより、xss からも保護されますが、Request Validation を無効にする場合は、データベースからのデータがブラウザーに出力される前に html エンコードされていることを確認する必要があります (これは良い方法です)。とりあえず)。

于 2013-02-05T06:08:53.877 に答える