mysql如何解释转义字符串?

时间:2013-07-29 09:31:38

标签: php mysql

<?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等于\或什么?

3 个答案:

答案 0 :(得分:1)

它会找到密码与' OR ''='

完全匹配的记录

反斜杠正在转义单引号,以便$pwd无法突破外部引号。

以这种方式转义是一种防止SQL注入的原始方法。 Prepared Statements是首选,因为不需要转义,MySQL引擎将变量作为参数分别接收到查询,因此不需要连接,也不会出现SQL注入。

答案 1 :(得分:0)

password等于\或什么?”

不,因为\始终会转义以下字符。因此,在您的情况下,password将等于' OR ''='\确保以下字符不被解释为单引号而是字符串。这就是方法mysql_real_escape_string()的用途。您甚至可以在示例中的SO突出显示中看到它。

有关主题SQL Injection的更多信息,一些示例可以是found here

答案 2 :(得分:0)

MYSQL是这样的:

SELECT '\'1' - 返回'1因为\关闭'character

的特殊含义

因此,在您的示例中,password='\' OR \'\'=\''被视为' OR ''='