为了账号安全,请及时绑定邮箱和手机立即绑定

围绕mysql_real_escape_string()的SQL注入

围绕mysql_real_escape_string()的SQL注入

达令说 2019-05-20 15:28:09
即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?考虑这个示例情况。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()函数也可以破解。但我想不出任何可能的漏洞?像这样的经典注射:aaa' OR 1=1 --不工作。你知道任何可能通过上面的PHP代码注入的注入吗?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

请考虑以下查询:

$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";


查看完整回答
反对 回复 2019-05-20
?
跃然一笑

TA贡献1826条经验 获得超6个赞

嗯,除了%通配符之外,除了通配符外,没有什么可以通过它。如果您使用LIKE声明可能会很危险,%因为如果您不对此进行过滤,则攻击者可以将登录作为登录,并且必须强制使用您的任何用户的密码。人们经常建议使用预准备语句使其100%安全,因为数据不会以这种方式干扰查询本身。但是对于这样简单的查询,做类似的事情可能会更有效率$login = preg_replace('/[^a-zA-Z0-9_]/', '', $login);


查看完整回答
反对 回复 2019-05-20
  • 3 回答
  • 0 关注
  • 3332 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信