この質問に対する答えは「いいえ」だと確信していますが、<
と>
を<
と>
に単純に変換する方法を見つけることができないようです。反映された永続的なXSSを完全にブロックしません。
CSRFについて話しているのではありません。
これがXSSをブロックしない場合、この防御を回避する方法の例を提供できますか?
属性で信頼できない文字列("
で引用)を使用する場合は、"
を"
としてエスケープする必要があります。
そうでなければ、JavaScriptを簡単に挿入できます。たとえば、<a href="{{str}}">
とstr
は、たとえば" onmouseover='something-evil'"
です。
データが挿入されている場所に応じて、すべてのXSS攻撃に<または>が含まれるわけではありません。
いいえ。<
、>
、'
、"
、および&
をエスケープするだけでは不十分な例をいくつか示します。
例1:
<a href="{{myUrl}}">
XSS攻撃:
myUrl = "javascript:alert(1)"
例2:
<script>var page = {{myVar}};</script>
XSS攻撃:
myVar = "1;alert(1)"
これらの攻撃を防ぐ方法については、 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet を参照してください。
いいえ、それだけでは不十分です。 XSSは、HTMLの信頼できないデータだけでなく、JavaScriptやCSSにも含まれていることを忘れないでください。 「varmyVar = [input];」のような状況を考えてみてください。その[入力]値を使用して、山かっこに近づくことなく、あらゆる種類の悪意のあることができます。 XSSチートシートにはさらに多くの例があります: http://ha.ckers.org/xss.html
タグでASP.NETについて言及しました。あなたが見たいのは[AntiXSS library][1]
。これを取得し、適切な出力エンコーディングを使用します。
Encoder.CssEncode()
Encoder.HtmlEncode()
Encoder.HtmlAttributeEncode()
Encoder.JavaScriptEncode()
などなど。NETで独自の文字置換を試みる理由はまったくありません。