5

我以前从未在打开魔术引号的环境中编程过。现在我正在做一个项目。这就是我设置用户接受数据情况的方式:

$first_name = $_POST['first_name']
if(!get_magic_quotes_gpc()) {
    $first_name = mysql_real_escape_string($first_name);
}

通过该过滤,启用魔术引号后,我是否仍然可以进行 SQL 注入攻击?

我真的只关心会破坏我的查询的任何类型的 SQL 注入......其他白名单,htmlspecialchar() -ing 等在其他领域已经到位。

查看一些类似的 SO 问题,似乎建议改为检查魔术引号,如果数据已打开,则在数据上运行“stripslashes”,然后始终运行转义功能。不过,我有点担心这样做,因为站点中的所有现有代码都假定它处于打开状态。

谢谢!

4

2 回答 2

1

使用遗留系统可能是一个真正的 PITA——尤其是像 PHP 这样的东西,它让一些非常令人震惊的不安全代码在过去糟糕的日子里被编写出来。

我认为您实际上已经回答了部分问题:

查看一些类似的 SO 问题,似乎建议改为检查魔术引号,如果数据已打开,则在数据上运行“stripslashes”,然后始终运行转义功能。不过,我有点担心这样做,因为站点中的所有现有代码都假定它处于打开状态。

我还将尝试启动代码审查 - 找到所有在数据库查询中写入或使用使用数据的地方,然后用更安全的转义替换。最终,您将替换所有这些松鼠式的查询,并能够永久关闭魔术引号。

于 2011-05-22T23:14:13.337 回答
0

如果你使用mysql_real_escape_string(正确)没有 SQL 注入的风险。这并不意味着输入会正常。如果您的魔术引号设置或任何其他内容设置不正确,则您的变量可能包含不正确的值。然而,它仍然是安全的。

于 2011-05-22T22:05:53.180 回答