sql 注入 - PHP 魔术语录问题


sql injection - PHP Magic Quotes Question

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

$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 注入的风险。这并不意味着输入会正常。如果您的魔术报价设置或任何其他内容设置不正确,则您的变量可能包含不正确的值。然而,它仍然是安全的。