1

WordPress 開発者の皆様

この質問に対する明確な答えを見つけることができませんでした。これは、jared によるサニタイズに関する投稿と、Theme Foundation によるテーマ カスタマイザーに関する記事に触発されたものです。特に、後者からの引用は次のとおりです。

入力が 1 (チェックボックスを示す) の場合、関数は 1 を返します。入力がそれ以外の場合、関数は空の文字列を返します。これにより、有害なものがデータベースに保存されるのを防ぎます。

有害なものがデータベースに保存されるのを防ぐという最後の行は、私たち全員が同意できるものだと思います. しかし、私が得られないのは、チェックボックスから有害なものを取得する方法です-プログラミングエラーを起こさない限り-可能な値は2つしかないためです?

したがって、そのような場合のサニタイズがまさにそれを防ぐためにある場合、プログラミングエラーによる「データの破損」は、それが良いことなのか悪いことなのかわかりません。

入力がテキストまたはテキストフィールドである場合にのみデータをサニタイズするのが理にかなっていると思います-少なくとも有害なものからの保護があなたの目標である場合. データを使いやすくするためにデータをフォーマットする必要がある場合があると思いますが、それは別の主題です。

4

1 に答える 1

1

有害なものがデータベースに保存されるのを防ぐという最後の行は、私たち全員が同意できるものです

問題は、「有害」は文脈に大きく関係しているということです。データベース内の JavaScript 自体は有害ではありません。別のユーザーのセッションで HTML に出力される場合にのみ「有害」です。結果として、この種の脆弱性 (XSS) は、出力エンコーディングを介してより適切に処理されます。つまり、コンテンツをページに出力するときは、HTML でエンコードする必要があります。&lt;script;&gt;これにより、表示されたページにリテラルを実際に出力するだけのスクリプトタグが出力<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て、管理者ユーザーを作成できる可能性があります。ポストバック時にチェックボックスを再度「サニタイズ」すると、アプリケーションが有効な値のみを受け入れるようになります。

于 2016-01-21T08:07:08.957 に答える