我在这里看到一些人指出,使用串联查询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对替代品的局限性很感兴趣,并且没有将其与替代品进行比较,我意识到新项目有更好的选择,并且对此没有争议。
临摹微笑
千万里不及你