4

重複の可能性:
PHP で SQL インジェクションを防止する最善の方法

このコードは、SQL インジェクションに対して十分に保護されていますか

if(isset($_POST['Submit']))
{
$user = mysql_real_escape_string($_POST["user"]);
$pass = mysql_real_escape_string($_POST["pass"]);
$confirm_key=md5(uniqid(rand()));

$query = mysql_query("INSERT INTO members 
(user, pass, mail, confirm_key, country, city, www, credo)
VALUES  ('$user','$pass','$_POST[mail]','$confirm_key','$_POST[country]','$_POST[city]','$_POST[www]','$_POST[credo]')")
or die ("Error during INSERT INTO members:    " . mysql_error());
exit();
}

これは正しい方法であり、各入力 (国、都市など) を保護する必要がありますか?

4

2 に答える 2

5

mysql_query新しいアプリケーションには使用しないでください。mysqliまたは PDO を使用して、プレースホルダーでエスケープする必要があります。使用できるがたくさんあります。

通常、SQL は次のようになります。

INSERT INTO `table` (column) VALUES (?)

次のようにすべきではありません:

INSERT INTO `table` (column) VALUES('$dangerous_user_content')

プレースホルダーを適切に使用すれば、SQL インジェクション ホールを作成することはほとんど不可能です。

于 2012-08-02T20:57:45.800 に答える
1

http://php.net/manual/en/function.mysql-real-escape-string.php

PHPドキュメントでさえ、mysql_real_escape_stringを使用しないと言っています

于 2012-08-02T21:01:41.397 に答える