HTML 入力をサニタイズするときに、ブラックリストではなくホワイトリストを使用するのはなぜですか?
XSS の脆弱性を開くための卑劣な HTML トリックはいくつありますか? 明らかに、スクリプト タグとフレームは許可されておらず、HTML 要素のフィールドでホワイトリストが使用されますが、ほとんどすべてを許可しないのはなぜでしょうか?
ホワイトリストから何かを除外すると、そもそも考えるほど重要ではなかった何かが壊れてしまいます。
ブラックリストから何かを除外すると、大きなセキュリティ ホールが開いたことになります。
ブラウザーが新しい機能を追加すると、ブラックリストは古くなります。
昨日、それについて何か読んだだけです。feedparserのマニュアルに載っています。
スニペット:
調べれば調べるほど、Windows 用の Internet Explorer が一見無害に見えるマークアップをコードとして扱い、軽々しく実行するケースが増えてきました。これが、Universal Feed Parser がブラックリストではなくホワイトリストを使用する理由です。ホワイトリストに含まれる要素や属性はどれもセキュリティ リスクではないという確信があります。明示的に調査していない要素や属性については、まったく自信がありません。また、Windows 用の Internet Explorer が実行可能コードとして扱う属性値内の文字列を検出する能力については、まったく自信がありません。「いいスタイルだけ」を守ろうとはしません。すべてのスタイルが削除されます。
一部の要素のみをブラックリストに登録し、重要な要素を忘れると、重大なリスクが生じます。安全であることがわかっているいくつかのタグをホワイトリストに登録すると、悪用される可能性のあるものを入れるリスクが小さくなります。
スクリプトタグとフレームタグは許可されていませんが、このようなタグを付けることができます
<test onmouseover=alert(/XSS/)>mouse over this</test>
多くのブラウザが動作します。
そうすれば、何も見逃さないと確信できるからです。一部のタグを明示的に許可することで、何が許可されるかを明らかにより詳細に制御できます。
ホワイトリストは、ほとんどのセキュリティ関連のトピックで使用されています。ファイアウォールについて考えてみてください。最初のルールは、すべての (着信) トラフィックをブロックし、開いているはずのポートのみを開くことです。これにより、はるかに安全になります。
他のタグがページのレイアウトを壊す可能性があるためです。<style>
誰かがタグを注入するとどうなるか想像してみてください。<object>
タグも危険です。
許可すればするほど、巧妙なハッカーが Web ページに厄介なコードを挿入する手口が増えます。だからこそ、できるだけ少なくしたいのです。
Ruben van VreelandのレクチャーHow We Hacked LinkedIn & What Happened Nextを参照して、XSS 脆弱性の適切な紹介と、ホワイトリストをできるだけ厳密にする必要がある理由を確認してください。