php - 绕过 mysql_real_escape_string() 的 SQL 注入(injec

即使使用 mysql_real_escape_string() 是否也有 SQL 注入(inject)的可能性?功能?

考虑这个示例情况。 SQL 在 PHP 中是这样构造的:

$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";

我听到很多人对我说这样的代码仍然很危险,即使使用 mysql_real_escape_string() 也可能被黑客入侵。使用的函数。但我想不出任何可能的漏洞?

像这样的经典注入(inject):
aaa' OR 1=1 --

不工作。

你知道任何可能的注入(inject)可以通过上面的 PHP 代码吗?

最佳答案

考虑以下查询:

$iId = mysql_real_escape_string("1 OR 1=1");    
$sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string()不会保护您免受此侵害。
您在查询中的变量周围使用单引号( ' ' )这一事实可以保护您免受此影响。 以下也是一个选项:
$iId = (int)"1 OR 1=1";
$sSql = "SELECT * FROM table WHERE id = $iId";

关于php - 绕过 mysql_real_escape_string() 的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5741187/

相关文章:

php - htmlentities() 与 htmlspecialchars()

php - 查找两个日期之间的天数

php - 如何在 PHP 中将字符串转换为数字?

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - 如何在 PHP 中获得有用的错误消息?

php - fatal error : Allowed Memory Size of 1342177

php - 如何将 var_dump 的结果捕获到字符串?

php - PHP中@符号的用途是什么?

php - 如何捕获 PHP 致命 (`E_ERROR` ) 错误?

php - 在 PHP 中使用前导零格式化数字