HTMLページへの入力をサニタイズするためのライブラリまたは許容可能な方法はありますか?
この場合、名前、電話番号、および電子メールアドレスだけのフォームがあります。
コードはC#である必要があります。
例えば:
"<script src='bobs.js'>John Doe</script>"
になる必要があります"John Doe"
HTMLページへの入力をサニタイズするためのライブラリまたは許容可能な方法はありますか?
この場合、名前、電話番号、および電子メールアドレスだけのフォームがあります。
コードはC#である必要があります。
例えば:
"<script src='bobs.js'>John Doe</script>"
になる必要があります"John Doe"
HtmlSanitizer .Net ライブラリを使用しています。
NuGetでも
この回答に対するコメントに基づいて、この質問で役立つ情報が見つかるかもしれません:
https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public- Webサイト
パラメータ化されたクエリの例を次に示します。これの代わりに:
string sql = "UPDATE UserRecord SET FirstName='" + txtFirstName.Text + "' WHERE UserID=" + UserID;
これを行う:
SqlCommand cmd = new SqlCommand("UPDATE UserRecord SET FirstName= @FirstName WHERE UserID= @UserID");
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text;
cmd.Parameters.Add("@UserID", SqlDbType.Integer).Value = UserID;
編集:注射がなかったので、それを扱った回答の部分を削除しました。基本的なパラメーター化されたクエリの例は残しました。これは、質問を読んでいる他の人にとってまだ役立つ可能性があるためです。
――ジョエル
サニタイズとは、タグを完全に削除することを意味する場合、Bryant によって参照されている RegEx の例は、必要なソリューションのタイプです。
コードがデザインを台無しにしないようにして、ユーザーにレンダリングしたいだけの場合。HttpUtility.HtmlEncode メソッドを使用して、それを防ぐことができます!
Microsoft Anti-Cross Site Scripting Libraryを使用するのはどうですか?
コンテンツを送信するユーザーがいるようですが、完全に信頼することはできませんが、提供するコンテンツを非常に安全な HTML としてレンダリングしたいと考えています。ここに 3 つのテクニックがあります: すべてを HTML エンコードする、悪い部分だけを HTML エンコードおよび/または削除する、使い慣れた HTML にコンパイルする DSL を使用する。
「ジョン・ドウ」になるべきか?その文字列をHTML エンコードし、ユーザー「John Doe」(実際にそれが彼の本名である場合) に、ばかげた名前の名前を付けさせます<script src='bobs.js'>John Doe</script>
。そもそもスクリプト タグやその他のタグで名前を囲むべきではありませんでした。これは、他の手法のいずれかに本当に優れたビジネス ケースがない限り、すべての場合に使用するアプローチです。
ユーザーから HTML を受け取り、 @Bryant が言及したサニタイズ方法のようなホワイトリスト アプローチを使用して (出力で) サニタイズします。これを正しく理解することは (非常に) 難しいことであり、私はそれを理解できる人に任せます。一部のサニタイザーは、他の人が問題のあるビットを完全に削除したであろう悪を HTML エンコードすることに注意してください。
別のアプローチは、HTML に「コンパイル」する DSL を使用することです。一部 ( MarkdownSharpなど) は、エンコードされていないタグや悪の属性などの任意の HTML を許可するため、DSL コンパイラを必ずホワイトハット化してください (ちなみに、これは完全に合理的ですが、必要または期待するものではない可能性があります)。その場合は、手法 2 を使用して、コンパイラの出力をサニタイズする必要があります。<script>
最後に: