我以前从未在打开魔术引号的环境中编程。 现在我正在做一个项目。 这就是我设置用户接受数据情况的方式:
$first_name = $_POST['first_name']
if(!get_magic_quotes_gpc()) {
$first_name = mysql_real_escape_string($first_name);
}
通过这种过滤,当启用魔术引号时,我是否仍然对SQL注入攻击持开放态度?
我真的只关心任何类型的SQL注入会破坏我的查询......其他白名单,htmlspecialchar()-ing等适用于其他领域。
查看一些类似的SO问题,似乎建议改为检查魔术引号,如果数据已打开,则对数据运行"条形斜杠",然后始终运行转义功能。 不过,我有点担心这样做,因为站点中的所有现有代码都假设它已打开。
谢谢!
使用遗留系统可能是一个真正的PITA - 特别是像PHP这样的东西,它允许在糟糕的过去编写一些非常令人震惊的不安全代码。
我想你实际上已经回答了你的部分问题:
查看一些类似的SO问题,似乎建议改为检查魔术引号,如果数据已打开,则对数据运行"条形斜杠",然后始终运行转义功能。不过,我有点担心这样做,因为站点中的所有现有代码都假设它已打开。
我还会尝试启动代码审查 - 找到在数据库查询中写入或使用数据的所有位置,然后替换为更安全的转义。最终,您将替换所有这些松鼠查询,并能够永久关闭魔术报价。
如果您(正确)使用 mysql_real_escape_string
,则没有 SQL 注入的风险。这并不意味着输入会正常。如果您的魔术报价设置或任何其他内容设置不正确,则您的变量可能包含不正确的值。然而,它仍然是安全的。