この少なくとも軽度の安全なPHPのコードはありますか?
-
09-09-2019 - |
質問
私は$ _POST長い形式経由で送信されている変数との代わりに、ハードがmysql_escape_string()
で各1コーディングの束を持って、私は次のことを行うためにそれは大丈夫でしょうか?これは、実際に安全かどうかはわからない、および/または実行可能なコードます。
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
私は私が使用して&てるので、それは、参照、値ではなくそれを渡すことだとかなり確信しているので、私は実際には$ _POSTの値を変更しています。
また、私の代わりにmysql_real_escape_string()
を使用する必要がありますか?
編集:私はPDOを使用して上記の方法と一緒に()を製造しています。これは私のためにそれの世話をしていますか?
解決
なぜarray_map()
を使わないのでしょうか?
array_map(mysql_real_escape_string, $_POST);
しかし、現実には、あなたが準備/パラメータ化ステートメントを使用する必要があります。
mysql_real_escape_string()
は、アカウントに設定された現在のデータベースの文字を取り、mysql_escape_string()
はしていません。だから、前者は比較して、より良い代替手段です。
編集(質問に対するOPの編集をフォローアップ):
あなたはすでにPDOは、書類を作成しないので、、あなたの値を変更する必要はありません。 PDOは(つまり、のある、あなたが本当にパラメータのすべてのデータを入れた場合の - 文字列だけでは、SQLステートメントを構築するために連結PDOの有無にかかわらず、災害につながる)それはそれの全体のポイントですが、すべての面倒を見ます。事前に値をエスケープすることは、データベース内のエスケープ値につながるます。
他のヒント
はい、あなたは、mysql_real_escape_string()
を使用する必要があります。しかし、変数をデータベースに送信しても安全であることを確認してくださいするための正しい方法は、/ <パラメータ化クエリを使用しています// PHP:A> mysqliのの機能または<のhref = "HTTPのいずれかを介してPHPで提供されています。ネット/ PDO」のrel = "nofollowをnoreferrer"> PDO でます。
前のコメントに加えて、パラメータ化クエリを使用する別の利点は、データベースがより良い最適化を行うと、おそらくあなたはより良いパフォーマンスが得られますので、キャッシュされたクエリプランを使用することができるということです。