我在这里看到一些人表示使用连接查询mysql_real_escape_string
不会(完全)保护您免受 SQL 注入攻击。
mysql_real_escape_string
但是,我还没有看到说明无法保护您免受攻击的输入示例。大多数示例忘记了mysql_query
仅限于一个查询并且使用mysql_real_escape_string
不正确。
我能想到的唯一例子如下:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
这不会保护您免受以下输入的影响:
5 OR 1=1
我认为这是错误使用mysql_real_escape_string
而不是缺点,它是为字符串而不是数值设计的。您应该转换为数字类型,或者如果您在清理时要将输入视为字符串,您应该在查询中执行相同操作并在其周围加上引号。
谁能提供一个可以绕过的输入示例,该示例mysql_real_escape_string
不依赖于不正确处理数值或忘记mysql_query
只能执行一个查询?
编辑:我对它的局限性感兴趣,mysql_real_escape_string
而不是将其与替代方案进行比较,我意识到新项目有更好的选择,我对此没有异议。