2010-04-09 77 views
3

为什么在PHP中启用magic_quotes_gpc被认为是不好的做法?为什么把magic_quotes_gpc视为一种不好的做法?

+2

嗯..因为它在PHP6.0中被删除,并且从PHP5.3开始被弃用了呢? :P – 2010-04-09 20:04:38

+2

@Noah Goodrich:这是一个鸡与鸡蛋的问题。该功能是否被删除,因为开始时是不好的做法?大多数人可能会认为是。 – 2010-04-09 20:07:08

+0

@Noah Goodrich是“可能”,或者你确定? – 2010-04-09 20:10:06

回答

13

我不认为我能解释它比任何PHP本身的制造商更好的(与网页后续评论):Why not to use Magic Quotes

  • 可移植性:假设它是或熄灭,影响了便携性。使用get_magic_quotes_gpc()检查这一点,并相应地编码。
  • 性能:因为不是每一个转义数据都插入到数据库中,转义所有这些数据会导致性能损失。只需在运行时调用转义函数(如addslashes())就更有效。尽管php.ini-development在默认情况下启用了这些指令,但php.ini-production会禁用它。这个建议主要是由于性能原因。
  • 不便之处:因为不是所有的数据都需要转义,所以看到转义的数据不应该出现的时候通常很烦人。例如,通过电子邮件发送表单,并在电子邮件中看到一堆“\”。要解决这个问题,可能需要过度使用stripslashes()

注意:此功能在PHP 5.3.0和PHP 5.4.0以前已被删除。

+0

即使将数据_is_插入到数据库magic \ _quotes \ _gpc/addslashes中也可能无法实现。 – VolkerK 2010-04-09 20:06:28

3

根据文章What is Magic Quotes GPC (magic_quotes_gpc) in PHP and the php.ini?,也有许多缺点:其中表单提交被发送回浏览器必须()与呼叫手动移除的stripslashes斜线

  • 案件。
  • 如果此服务器的魔术引号被关闭,或者代码被移动到未启用魔术引号的服务器,则您的脚本将失败。或者更糟的是,不会立即失败,只会表现出奇怪的行为
  • 对提交的变量进行任何字符串操作,即使是简单的'if'语句都必须考虑到内容中的斜杠变形的可能性。
  • 魔术引号引起开发者的sl。。插入到SQL查询中的转义变量(在我看来)是开发人员应该知道并思考的东西。不仅仅是假设一切都是华丽的。
2

因为有人可以将您的脚本移动到未启用该选项的服务器,因此在应用程序中立即打开数百个安全漏洞。另外,太多认为启用魔术引号会使您的应用程序安全。它不是。您仍然需要检查并验证进入应用程序的每一个输入。即使您没有报价问题,仍然可能存在跨站点脚本问题等。

即使未来版本的PHP中正在删除该功能的事实。

1

“Magic Quotes”是PHP手头持有的尝试,防止开发人员在不知情的情况下用SQL注入自己的脚步。它弃用PHP 5.3,并且将在PHP被删除6.

我说,最好是明确和逃生需要转义,而不是逃避一切并有反转义的事情,永远不会被放在什么数据库。魔术报价创造了很多(或更多)问题,而不是解决问题,试图屏蔽那些应该更好地了解的人。

http://us3.php.net/manual/en/security.magicquotes.php

2

因为离开它脱力你写出更安全的代码。

如果O'Malley先生在您的网站上注册,那么magic_quotes_gpc会将他的姓氏变成O \'Malley,并且当您将其插入到数据库中时,一切都会好起来的。

问题是,magic_quotes来自addslashes--它不一定会作为数据库系统的转义工作。 O'Malley可能会工作,但也可以规避这种逃跑并执行SQL注入。

如果magic_quotes的都没有,那么你会得到字符串奥马利,这将打破SQL语句像

INSERT INTO users (...) VALUES (...,'O'Malley',...) 

通知的字符串是O.

后真的终止

此外,它更好:例如,如果您要用他的名字发送电子邮件,则必须使用反斜杠 - 没有理由。如果你不知道,你会收到O'Malley先生的电子邮件。 (当然,对于真正安全的数据库处理代码,你会希望使用参数化查询,因为这是防止SQL注入的最佳方法,而且如果你参数化,你不需要斜杠,并且这是浪费时间让PHP添加它们。)

0

很容易的问题。
想象一下,你想通过电子邮件发送用户的数据。或者将cookie中的用户名插入到表单输入中。你觉得像鲍勃“布法罗”比尔这样的名字会是个好主意吗?我不这么认为

相关问题