1
<?php
$user = 'john';
$pwd = "' OR ''='";
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'";
echo $sql.'<br />';
// escape username and password for use in SQL
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);

$sql_escaped = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'";

echo $sql_escaped;
?> 

それが示している:

SELECT * FROM users WHERE user='john' AND password='' OR ''=''
SELECT * FROM users WHERE user='john' AND password='\' OR \'\'=\'' 

質問:

mysql はこの行をどのように解釈しますか: password='\' OR \'\'=\''? password等しい\か何?

4

3 に答える 3

0

password等しい\か何?」

いいえ、 a は\常に次の文字をエスケープするためです。したがって、あなたの場合passwordは に等しくなり' OR ''='ます。次の\文字が一重引用符ではなく文字列として解釈されることを確認してください。そのためのメソッドmysql_real_escape_string()です。あなたの例のSO強調表示でもそれを見ることができます。

SQL インジェクションのトピックの詳細といくつかの例については、こちらを参照してください。

于 2013-07-29T09:40:48.023 に答える
0

MYSQL は次のように実行します。

SELECT '\'1'- ' 文字の特別な意味をオフにする'1ため、戻ります\

あなたの例では、あなたpassword='\' OR \'\'=\'' は次のように解釈されます' OR ''='

于 2013-07-29T09:41:06.693 に答える