0

アプリケーションでクロスサイドスクリプティングを回避しようとしていますが、スクリプトを含むデータをデータベースに保存する必要がありますが、同じデータを表示するときは、スクリプトとしてではなくテキストとして表示する必要があります。

ステップ1:ウェブサイトにテキストボックスがあり、以下のコードを介して挿入しようとしています

test data alert('悪意のあるコード');

ステップ 2:テキストの正確な内容をデータベースに保存しています (validateRequest が false に設定されていることに注意してください)。

ステップ 3:次に、スクリプトが実行されるべきではない Web ページのコンテンツを表示しています。

注: AntiXss と Sanitizer を使用して制限しましたが、Sanitizer を使用している場合、スクリプトは Sanitizer によって無視されます。スクリプトをテキストとして表示する解決策を教えてください (スクリプトの実行も避ける必要があります) .)

4

1 に答える 1

2

あなたの場合、

「彼らは一緒に働くべきではありません」。asp.net 検証と危険な入力が競合しています (ただし、antixss ライブラリ経由で提供されます)。

Validate Request = "true"ASP.Net セキュリティ メカニズムです。これは、入力内の潜在的に危険なタグを (ヒューリスティックまたはホワイト リストを使用して、よくわかりません) フィルタリングすることにより、XSS 攻撃から保護することを目的としています。たとえば、ASP.Net アプリケーションを作成する場合Validate Request = "true"、および のようなクエリ文字列パラメーターを入力しようとする場合

SaveProduct.aspx?q=<script>alert(1);</script>

、「潜在的に危険な Request.Form 値が cliet から検出されました..何とか何とか何とか」というメッセージが表示されます。これは、ページ レベルまたは web.config で設定された Validate Request = "true" の動作です。

さて、antixss ライブラリを使用するポイントは、現在のような状況が発生したときです。ユーザー入力をそのまま (潜在的に危険な入力を伴う) 受け取り、どこかに保存して、ユーザーに表示します。オフにする必要があります。 ASP.Net の検証要求。そうすることで、ASP.Net に Web アプリケーションのセキュリティを任せるように指示することになります。また、ASP.Net ではなく、XSS の脆弱性を処理する責任があります。データベースに保存するときに、antixss のGetSafeHtmlFragment()メソッドを使用して入力をサニタイズします。また、 antixss バージョン 4.2.1 は厳密なエスケープで知られていることに注意してください。

脆弱性を持つユーザーにコンテンツを表示するときは、コンテンツをコンテキストに合わせて HTML エンコードする必要があります。たとえば、潜在的に危険な文字列を javascript、css、または html で出力する場合は、javascript、css、または html エンコーディングに従ってエンコードする必要があります。詳細 - AntiXss.HtmlEncode と HttpUtility.HtmlEncode の違いは何ですか?

オプションを antixss ライブラリの html エンコードで評価することをお勧めします。ただし、ここでの解決策は Validate Request をオフにすることです。データベースに保存する前に antixss を使用し (Html Agility パックが望ましい) HtmlEncode()、ページの html コンテキストに表示する前に使用します。Rick Strahl は、Html Agility Pack を使用したサンプル実装をhttp://weblog.west-wind.com/posts/2012/Jul/19/NET-HTML-Sanitation-for-rich-HTML-Inputにあります。

確実な理解と正しい実装のために、以下の質問をよく読んでください。

于 2014-01-04T08:48:38.063 に答える