1

たとえば、私はこの入力を持っています:

名前ウォーリー

メールwallycat@example.com'; DROP TABLE ClientTable; PRINT'ひどい!'-

私のパラメータ化されたクエリは次のとおりです。

$name = $_REQUEST['name'];

$email = $_REQUEST['email'];

$sql = "INSERT INTO ClientTable (Name, Email)

        VALUES ('$name', '$email')";

このパラメーター化されたクエリを使用する場合でも、ユーザー入力を検証する必要がありますか?(この場合、電子メールフィールド)

または、パラメータ化されたクエリを使用しているため、すでに安全です。クエリは次のすべてを単純に格納します。'wallycat@example.com'; DROP TABLE ClientTable; PRINT'Too bad!'-'データベースにありますか?

ありがとうございました!

4

3 に答える 3

2

あなたが使用することができます

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");
于 2012-02-27T16:28:25.493 に答える
1

次のようなことをもっと行う必要があります。

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email));
于 2012-02-27T16:21:50.677 に答える
0

パラメータ化されたクエリは、エスケープを処理します。ただし、おそらくデータを検証したいでしょう。たとえば、おそらくその電子メールが少なくとも のようなものであること、電話番号が数字のみで構成されていることなどを確認したいでしょうuser@domain。これは、セキュリティよりもデータの完全性に関するものですが、重複する部分もあります。

ただし、例ではパラメーター化されたクエリを使用せず、変数置換を使用するだけです。パラメータ化されたクエリは、Prepared Statement を意味します。

于 2012-02-27T16:22:05.157 に答える