可预防数据库攻击的mysql_real_escape_string函数
下例代码没使用mysql_real_escape_string()函数:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); ... mysql_close($con); ?> |
如果用户输入信息如下:
$_POST[‘user’] = “john”;
$_POST[‘pwd’] = “‘ OR ‘‘=‘”;
则SQL查询会成为这样:
SELECT * FROM users WHERE user=’john’ AND password=” OR ”=”
这意味着用户不用输入正确信息也可以通过sql的查询语句,获得相应权限。
上述代码存在着很大的安全隐患,如果改成这样,则会好很多:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $uname = mysql_real_escape_string($_POST['user']); $upwd = mysql_real_escape_string($_POST['pwd']); $sql = "SELECT * FROM users WHERE user='{$uname}' AND password='{$upwd}'"; mysql_query($sql); ... mysql_close($con); ?> |
mysql_real_escape_string()函数对下列字符产生影响:
● \x00
● \n
● \r
● \
● ‘
● ”
● \x1a
参考资料:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp
此例已验证。