有害なものがデータベースに保存されるのを防ぐという最後の行は、私たち全員が同意できるものです
問題は、「有害」は文脈に大きく関係しているということです。データベース内の JavaScript 自体は有害ではありません。別のユーザーのセッションで HTML に出力される場合にのみ「有害」です。結果として、この種の脆弱性 (XSS) は、出力エンコーディングを介してより適切に処理されます。つまり、コンテンツをページに出力するときは、HTML でエンコードする必要があります。<script;>
これにより、表示されたページにリテラルを実際に出力するだけのスクリプトタグが出力<script>
されます。
しかし、私が得られないのは、チェックボックスから有害なものを取得する方法です-プログラミングエラーを起こさない限り-可能な値は2つしかないためです?
攻撃者が POST されたデータを操作した場合ではありません。たとえば、チェックボックスが次のように定義されている場合
<input type="checkbox" name="agreeToTCs" />
agreeToTCs=on
チェックすると、これがアプリケーションに送信されます。
ただし、攻撃者は POST リクエストを操作して、これを に変更する可能性がありますagreeToTCs=evil
。これは指定するのと同じです
<input type="checkbox" name="agreeToTCs" value="evil" />
HTMLとチェックされているボックスで。
Wordpress カスタマイザーの選択ボックス、チェックボックス、ラジオボタンをサニタイズすることが推奨されるのはなぜですか?
つまり、アプリケーションは有効なデータのみを処理する必要があるということです。簡単な例として、新しいユーザーを作成するときにユーザー レベルを選択できるシステムを想像してください。システム設計上、自分と同等以下のユーザーしか指定できません。これは、低レベルのユーザーが管理者アカウントを作成して完全な権限を取得するのを防ぐためです。中レベルのユーザーとしてログインしている場合、ドロップダウンの HTML は次のようにレンダリングされる可能性があります。
<select name="userLevel">
<option value="low">low</option>
<option value="medium">medium</option>
</select>
これがサーバーに POST されると、たとえばuserLevel=medium
送信されます。ただし、攻撃者は POST されたデータを操作しuserlevel=admin
て、管理者ユーザーを作成できる可能性があります。ポストバック時にチェックボックスを再度「サニタイズ」すると、アプリケーションが有効な値のみを受け入れるようになります。