1

インジェクション攻撃を防ぐためにデータをサニタイズする最善の方法を考えているところです。出力の直前、またはデータベースへの挿入の直前にサニタイズするのが好きな人もいますが、これには 2 つの問題があります。(2) 消毒しすぎたら?出力に悪影響を与えるわけではありませんが、すでに安全であることがわかっているものをサニタイズする意味はあまりありません。

たとえば、使用する代わりに PHP では、次のようなものでそれらをラップできませんでした$_GET:$_POST

function get($var) {
    return my_sanitizer($_GET[$var]);
}

それとも、それだけでは十分ではないでしょうか? 他に悪意のあるコードが侵入できる場所はありますか?


以下の回答を読んだ後、この質問が少しばかげていることに気づきました。データベースに挿入するか、HTML を出力するかによって異なります。その場合は、使用直前に行った方が良いかもしれません。それは大丈夫ですが、出力メソッドをラップするのも簡単です...

4

3 に答える 3

5

消毒には複数の種類があり、注射には複数の種類があります。たとえば、通常、HTML と JS は、出力前にサニタイズまたはエスケープする必要があります。ただし、適切な選択 (たとえば、すべての HTML を削除する、HTML をホワイトリストに入れる、ユーザーに何か他のものを入力させる、単にエスケープしてテキストとして表示する) は、アプリケーションによって異なります。

データベースインジェクションに関しては、代わりに準備済みステートメントを使用する必要があるネイトに同意します(これらは内部でエスケープを使用する場合がありますが、それは問題ではありません)。

要約すると、データを取得したらすぐに実行する自家製の包括的な my_sanitizerは、おそらく間違った選択です。

于 2009-10-15T05:38:45.367 に答える
1

個人的には、データベースに挿入する直前に常にサニタイズします。とはいえ、SQL ベースのデータベースにパラメーター化された SQL があり、sprocs は、害を及ぼすようなものを注入していないことを確認するための方法です。

于 2009-10-15T05:35:17.560 に答える
1

$_POST または $_GET 配列に対して foreach を実行し、すべてサニタイズできます

foreach($_POST as $key){ 

$_POST[$key] = addslashes($_POST[$key]) }

于 2009-10-15T05:37:06.440 に答える