0

私はちょっとしたサイド プロジェクトの API に取り組んでいますが、すべてのユーザー入力が SQL に直接使用されたり、ユーザーに表示されたりすることはないので、サニタイズする必要がありますか? もし私がするなら、私は正確に何をすべきですか?

現在、整数、文字列、配列などであるかどうかを確認していますが、それ以外に何かする必要がありますか?

4

1 に答える 1

1

問題は常に何の目的ですか?ユーザーから取得した値を取得するだけで、値を何も処理しない場合(値を保存して表示するだけ)、サニタイズする必要はありません。これらの値に何かを「積極的に実行」させる場合はサニタイズして、気に入らないことを実行しないようにすることができます。

たとえば、ユーザーからの HTML 入力を受け入れ、HTML形式のコンテンツが必要であるが、XSS の問題を回避したいとします。この場合、HTML 要素を選択的に削除する必要があります。つまり、入力をサニタイズする必要があります。

// some HTML is allowed, but not everything
echo remove_unwanted_html_elements($_POST['content']);

OTOH で HTML 入力の解釈を許可しない場合、つまり、ユーザーが投稿したものは、HTML として解釈されることなく文字どおりに表示されるだけであれば、何もサニタイズする必要はありません。ターゲット形式に従ってコンテンツをエスケープする必要がある場合があります。

// don't care what the user enters, just display it right back as is
echo htmlspecialchars($_POST['content']);

サニタイズは、完全には予測できない方法で値を評価する場合にのみ関連します。サニタイズとは、値を取得して別のものに変更することを意味し、通常は値から何かを削除します。これは非常にエラーが発生しやすい操作になる可能性があるため、非常に的を絞って意図的に実行する必要があります。何らかの理由でデータをサニタイズするだけではありません。もう 1 つの選択肢は単純な検証です。つまり、値が期待される基準に準拠していることを確認し、それ以外の場合は完全に拒否します。

ユーザーが入力したと思われる数値を取得して にキャストすることintも、非常に単純な形式のサニタイズです。無害な数値を取得することが保証されているため効果的ですが、その数値はユーザーが送信した値と関係がある場合とない場合があります。ここでは、検証の方が適切なオプションである可能性があります。

于 2013-06-05T11:25:55.683 に答える