私は、効果的にすべてのPOSTとGET変数を単一の関数で簡単に消去する方法を考案しようとしています。ここでは関数自体だ:
//clean the user's input
function cleanInput($value, $link = '')
{
//if the variable is an array, recurse into it
if(is_array($value))
{
//for each element in the array...
foreach($value as $key => $val)
{
//...clean the content of each variable in the array
$value[$key] = cleanInput($val);
}
//return clean array
return $value;
}
else
{
return mysql_real_escape_string(strip_tags(trim($value)), $link);
}
}
そして、ここではそれを呼ぶだろうコードです:それは動作するはずのよう
//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
$_POST[$key] = cleanInput($value, $link);
}
//This stops SQL Injection in GET vars
foreach ($_GET as $key => $value)
{
$_GET[$key] = cleanInput($value, $link);
}
私にはこれがそうです。しかし、何らかの理由で、フォームにあるチェックボックスから配列を返さないでしょう。彼らは空白を続けています。
私は上記の機能を使わずにコードをテストしたところ、うまくいきました。そこにセキュリティを追加したいだけです。
ありがとうございます!
すべてのコンテキストですべてをサニタイズしないでください。アプリケーションを邪魔するだけで、失われた機能を再現したいときにはセキュリティを確保することが難しくなります。これは、magic_quotesが無効になった正当な理由です。 http://php.net/manual/en/security.magicquotes.phpあなたがここで再現しているもの。送信するアプリケーションの入力をサニタイズする必要があります。 HTTP経由でブラウザに送信する場合は、HTTPとHTMLのためにそれをサニタイズします。 SQL DBに送信する場合は、SQL用にサニタイズします。 – bucabay
申し訳ありませんが、私は非推奨です:http://php.net/manual/en/security.magicquotes.php – bucabay
ヘルプ/アドバイスありがとうございました!私のプロセスを再考する必要があるように見えます。 :-) – tscully