2011-05-22 116 views
5

我从来没有在魔术引号打开的环境中进行编程。现在我正在研究一个项目。这就是我一直在设置用户接受的数据情况:当启用魔术引号PHP魔术引号问题

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

随着该过滤,我还在开放的SQL注入攻击?

我真的只关心任何类型的SQL注入将打破我的查询...其他白名单,htmlspecialchar()等等在其他地区的地方。

看着一些类似的SO问题,似乎建议您改为检查魔术引号,如果数据打开时对数据运行“stripslashes”,然后始终运行转义函数。我有点担心要这样做,因为网站中现有的所有代码都假设它已启用。

谢谢!

+4

我可以建议你跑步吗? – 2011-05-22 21:59:16

+1

'magic_quotes'-setting =>'addslashes()'!='mysql_escape'。这是两件不同的事情。阅读php.net/security.magicquotes.what – KingCrunch 2011-05-22 22:02:15

+4

我对这个问题的倒退感到失望;这些投票的目的是为了解决问题的质量,而不是问题中编码机制的优点。建议开启Magic Quotes的_answer可能值得赞赏,但这个问题已经得到很好的解答,而这个可怜的人需要安全地使用代码,这些代码应该可以被批量替换(如果我们生活在一个完美的世界中......) – sarnold 2011-05-22 22:11:43

回答

1

使用遗留系统可以是一个真正的PITA--特别是像PHP这样的东西,它可以让一些非常糟糕的不安全的代码写在糟糕的旧日子里。

我想你实际上已经回答了你的问题的一部分:

一些相似的,所以问题看,似乎它被建议,而不是检查魔术引号,运行在数据“的stripslashes”它已打开,然后始终运行转义功能。我有点担心要这样做,因为网站中现有的所有代码都假设它已启用。

我也会尝试并启动代码审查 - 查找使用数据正在编写或用于数据库查询的所有位置,然后用更安全的转义进行替换。最终,你会替换所有这些松鼠查询,并能够把魔术报价变成好的。

0

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