1

mysql_real_escape_stringを使用する正しいタイミングはいつですか?

isset(mysql_escape_string($ _ GET ['param']))を使用するときに使用する必要がありますか?

$ foo = mysql_real_escape_string($ _ GET ['bar']);を使用するときに使用する必要があります。

ありがとう

4

4 に答える 4

1

文字列リテラルを使用してSQLクエリを作成する場合は、この関数を呼び出す必要があります。
他の場所では呼び出さないでください。

この関数を呼び出すポイントは、のようなSQLを実行できないようにすることですSELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--'。邪悪な文字列が完全に文字列として扱われるように
mysql_real_escape_string、文字をエスケープします。'

于 2011-06-05T15:31:45.763 に答える
0

SQLインジェクションを防ぐために、mysqlクエリに挿入するデータを信頼できない場合は常に使用する必要があります。たとえば、すべてのユーザーフォームデータ。最初の例では:いいえ。2番目の例:はい、クエリで$foo変数を使用する場合。

于 2011-06-05T15:33:20.623 に答える
0

データベースクエリ(POST / GETデータ)にデータを挿入するときは常に使用する必要がありますが、データをチェックする必要がある場合は使用しないでください。

于 2011-06-05T15:33:39.420 に答える
-1

クエリで使用するユーザーからの入力がある場合は常に、mysql_real_escape_stringを使用します。

使用方法は次のとおりです。

$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = '$user' AND password = '$password' ";
//the quotes are vital  !!                 ^     ^  or you will not be safe!

動作しないサンプルコードは次のとおりです。

ここに画像の説明を入力してください壊れたコード

$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = $user AND password = '$password' ";

この例では、任意のパスワードとを入力してシス​​テムにログインできます
user or (1=1) --。これにより、クエリは次のようになります。

SELECT * FROM users WHERE user = user or (1=1) --  AND password = '$password

また、パスワードがチェックされないため、すべてのログインが承認されます。

mysql_queryを使用する場合、一度に実行できるSQLステートメントは1つだけなので、次のようになります。

$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysql_query($query);

の後にパーツを含めることはできないため、エラーが発生します;

ただし、このコードは機能します。

危険

$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysqli_query($query);

改善されたmysqli_queryでは、一度に2つ以上のステートメントを実行できるためです。

于 2011-06-05T16:30:04.417 に答える