ユーザーが送信した HTML を (データベースに) 保存しています。JavaScript インジェクション攻撃を防ぐ必要があります。私が見た中で最も悪質なのは、style="expression(...)"
.
これに加えて、かなりの量の有効なユーザー コンテンツに特殊文字や XML 構成要素が含まれているため、可能であればホワイト リストのアプローチは避けたいと考えています。(許可されるすべての HTML 要素と属性をリストします)。
JavaScript 攻撃文字列の例:
1.
"Hello, I have a
<script>alert("bad!")</script>
problem with the <dog>
element..."
"Hi, this <b
style="width:expression(alert('bad!'))">dog</b>
is black."
そのような JavaScript を防ぎ、残りをそのままにしておく方法はありますか?
私がこれまでに持っている唯一の解決策は、正規表現を使用して特定のパターンを削除することです。ケース 1 は解決しますが、ケース 2 は解決しません。
環境は基本的に Microsoft スタックです。
- SQL Server 2005
- C# 3.5 (ASP.NET)
- JavaScript と jQuery。
チョークポイントを ASP.NET レイヤーにしたいと考えています。誰でも不正な HTTP リクエストを作成できます。
編集
皆さん、リンクありがとうございます。リストを定義できると仮定すると (コンテンツには多くの数学およびプログラミング構造が含まれるため、ホワイトリストは非常に煩わしいものになります)、まだ質問があります。
「悪い」部分を削除できるのはどのような種類のパーサーですか? 悪い部分は要素全体である可能性がありますが、属性に存在するスクリプトはどうでしょうか? < a hrefs >
willy-nillyを削除できません。