タイトルで説明したのは、一般的な単語のフィルタリングを回避する手法です。
しかし、なぜこのテクニックが機能するのですか?たとえば、SELECTはSELSELECTECTと同じではありません。
私がWord <script>
をブラックリストに登録し、それを何も置き換えないとします。その後、<scr<script>ipt>
は<script>
になります。
これが、適切に記述されたhtmlサニタイザー/ピューリファイヤーがルールを再帰的に適用する理由です。これは、最後の衛生管理ステップでコンテンツに変更を加えなかった場合にのみ、停止または処理ルールの別のラウンドを適用しません。 (また、処理の回数が多すぎると、失敗してコンテンツが返されない可能性があります)。
これは単にs.Replace("select","")
を使用する壊れたサニタイザーに対して機能します。これをselselectect
に適用すると、中央のselect
が削除されますが、出力では再度実行されないため、分割sel
+ ect
はselect
になり、消毒剤を生き残ります。
この攻撃は、正気な消毒剤に対しては機能しません。