この投稿は、xjl756425616 によって 2014-08-07 11:03:45 に最終編集されました 多数のパラメーターの送信を処理しているときに、データベース クエリや挿入などの操作が発生する可能性があります。
この時、エスケープするか実体化する必要があります
セキュリティに詳しくないPHP初心者はこのようにクエリ文を書きます
$sql="select * from demo where user='".$_POST['user']."'"";
そうするとSQLインジェクションのリスクがあります
一般的に, ある程度の経験がある人は、このようにクエリ文を書きます
$sql="select * from demo where user='".addslashes($_POST['user'])."'"";
このように書くのは問題ありませんが、
1. 文が多すぎて、それぞれを書くのは専門的ではありません。面倒なので、
を見逃すのは避けられません。今の知識でこのステートメントを書いても、
$sql="select * from demo where user='".$_POST['user']."'"";
と書きますが、私は初心者ではありません。
処理ファイルの先頭に
$_POST=array_map("addslashes",$_POST);
実際のソースコード例
$_POST['user']="demo";
$_POST['content']="Hello,It's a book";
$_POST=array_map("addslashes",$_POST);
echo "";
var_dump($_POST);
?>
出力結果
array(2) {<br /> ["user"]=><br /> string(4) "demo"<br /> ["content"]=><br /> string(18) "Hello,It\'s a book"<br />}
-- ----解決策---------
次のように書きます
$a = array(<br /> 'a' => "a'b",<br /> 'b' => array("C'd", 123)<br />);<br />array_walk_recursive($a, function(&$v) { $v = addslashes($v); });<br />print_r($a);
Array<br />(<br /> [a] => a\'b<br /> [b] => Array<br /> (<br /> [0] => C\'d<br /> [1] => 123<br /> )<br /><br />)<br /><br />