PHP魔术引号问题

时间:2011-05-22 21:56:37

标签: php sql-injection mysql-real-escape-string magic-quotes

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

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

通过这种过滤,当启用魔术引号时,我仍然可以打开SQL注入攻击吗?

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

看一些类似的SO问题似乎建议改为检查魔术引号,如果它打开则对数据运行'stripslashes',然后总是运行转义函数。我有点担心这样做,因为网站上的所有现有代码都假定它已经开启。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用遗留系统可能是一个真正的PITA - 尤其是像PHP这样的东西,它可以在过去的糟糕时期编写一些非常恶劣的不安全代码。

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

  

看一些类似的SO问题似乎建议改为检查魔术引号,如果它打开则对数据运行'stripslashes',然后总是运行转义函数。我有点担心这样做,因为网站上的所有现有代码都假定它已经开启。

我还会尝试启动代码审查 - 查找在数据库查询中编写或使用数据的所有位置,然后替换为更安全的转义。最终,你将取代所有那些松散的查询,并且能够将魔法报价关闭。

答案 1 :(得分:0)

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