次のコードがあります。
label x = txtName.Text;
セキュリティ チームが dll を分析したところ、上記のコードに対して XSS 攻撃を実行できる可能性があることがわかりました。textboxText
プロパティが XSS 攻撃を防げないことはわかっていますが、どうすればよいですか?
次の修正は問題を解決しますか?
label x = Server.HtmlEncode(txtName.Text);
私はあなたがWebFormsについて話していると仮定していますLabel
-質問からは明らかではありません(実際のコードを投稿してください!)
これは、ASP.NET WebForms の設計の問題です。多くの要素には というプロパティText
がありますが、プロパティは要素によって異なることを行います。
Text
コントロールを設定すると、そのプレーン テキスト コンテンツが設定されることを願っています。この安全な操作は、その名前が示すように思われるものです。そして、それはこれらのコントロールの場合です:
残念ながら、他の多くのコントロールでは、同じ名前のプロパティが実際に要素にHTML マークアップを設定します。そのため、テキスト文字列が含まれている場合、山かっこ内<b>
の文字の代わりに太字のテキストが表示されます。b
また、テキストにそのような文字列が含まれ<script>
ていると、ブラウザ上でコードが実行され、セキュリティ上の問題が発生します。
これらの不幸な安全でないコントロールのいくつかは次のとおりです。
これらを安全に使用するには、Text
プロパティに書き込むすべてのコンテンツを HTML エンコードする必要があります。
最後に、両方向にスイングする 1 つのコントロールがあります。
デフォルトでは、これは HTML マークアップを設定しますが (ブー!)、Mode="Encode"
プロパティを設定すると、代わりにテキストが設定されます。
もちろん、これはすべて非常に紛らわしく、Web フレームワークを設計する方法はありませんが、それが私たちが取り組まなければならないことです。