<script>
タグと Javascript タグを許可しないように検証コードを入れたテキストエリアがありますが、ユーザーは のような説明を入力できます<strong onmouseover=alert(2)>
。
したがって、誰かがこの文字列タグの上にカーソルを置くと、JS アラート ボックスが表示されます。
この種の JavaScript インジェクションを停止するにはどうすればよいですか?
<script>
タグと Javascript タグを許可しないように検証コードを入れたテキストエリアがありますが、ユーザーは のような説明を入力できます<strong onmouseover=alert(2)>
。
したがって、誰かがこの文字列タグの上にカーソルを置くと、JS アラート ボックスが表示されます。
この種の JavaScript インジェクションを停止するにはどうすればよいですか?
許可する HTML を適切にサニタイズする必要があります。あなたが発見したように、これは自明ではありません。iframe
(おそらく、他のいくつかの要素を許可しない必要があります。)
適切なサニタイズには、要素のホワイトリストが必要であり、その中にそれぞれに許可されている属性のホワイトリストが必要です。明らかに、さまざまなonXyz
属性がホワイトリストに含まれていません。
クライアント側は何でもバイパスできるため、サニタイズはサーバー側で行う必要があります。したがって、使用しているサーバー テクノロジを知らなければ、何かを推奨することはできません。たとえば、JSoupは Java でよく知られているものですが、もちろん、Java を使用していない場合は役に立ちません。:-) .Net には、HTML Agility PackまたはMicrosoft Anti-XSS ライブラリがありますが、これは非常に不完全なリストです。
html purifiers と呼ばれるツールはたくさんあります。たとえば、これを試すことができます。
簡単な答えは ですreplace(/</g,'<');
が、もちろんそれではHTML を使用できなくなります。これが、BBCode、Markdown などの言語が存在する理由です。ユーザーに任意のコードを投稿する許可を与えることなく書式設定機能を提供するためです。
または、パターンのものを検索するだけです/\bon[a-z]+=/i