2010-06-11 66 views
7

我不知道是否有任何缺点或在执行下列步骤不好的做法:PHPヶ辆()对输入信号DB插入之前,而不是在输出

  1. $ USER_INPUT - >ヶ辆($ USER_INPUT) - > mysql_escape ($ USER_INPUT) - >从数据库中插入$ USER_INPUT到DB
  2. 选择$ USER_INPUT - >回声$ USER_INPUT

,而不是执行以下操作:

  1. $ USER_INPUT - > mysql_escape($ USER_INPUT) - >从数据库中插入$ USER_INPUT到DB
  2. 选择$ USER_INPUT - >回声ヶ辆($ USER_INPUT)

正如我们上了很多显示相同$ USER_INPUT的地方感觉效率更高,而不是输入,是否有这样做的缺点/不好的做法/利用能力?

干杯!

好的回复来自问题:

@马特:一般情况下,让事情变得可读性和可维护性,尽量保存它作为接近原始,未过滤的内容成为可能。这取决于两件事情: 是否有其他人/程序要引用此数据? 数据是否需要易于编辑?

@Sjoerd:如果您想要将数据显示为HTML之外的其他内容,则会有不利影响。 CSV下载,PDF等。

回答

3

这取决于两件事情:

  • 是任何其他人/程序要引用这个数据?
  • 数据是否需要易于编辑?

一个方法的优点是,在该数据在一个地方使用,htmlentities()会被称为每一次的情况下,你会节省这一步。

但是,如果HTML数据非常大,这只会带来显着的改进。一般来说,为了保持可读性和可维护性,尽量将其尽可能靠近原始未过滤内容进行存储。

实际上,您可能会发现无论如何HTML存储都是错误的。最好存储Markdown之类的内容,并在查看时将其转换为HTML。

+0

谢谢,做了这个特定的应用程序的数据是在对的购物车产品的意见,即用户评级和我想防止XSS攻击。因此,XSS攻击避免是这里的重点。 – grandnasty 2010-06-11 14:53:17

+0

是否有其他人/程序要引用此数据? - 目前没有,但可能稍后会通过API。 数据是否需要轻松编辑? - 用户应该能够编辑他们的评论 – grandnasty 2010-06-11 14:55:18

+0

@samuelf - 我建议你按原样存储HTML(尽管你仍然需要使用“mysql_escape”来避免SQL注入)。在请求时调用'htmlentities'应该不会有太大的影响。 – Matt 2010-06-11 14:57:11

1

如果您想要将数据显示为HTML以外的其他内容,例如,一个CSV下载,PDF等

+0

诚然,除非PDF通过wkhtmltopdf等。 – grandnasty 2010-06-11 14:51:30

3

我建议反对它。如果您需要该数据以外的任何内容,而不是将其显示为HTML(在控制台中显示,发送文本电子邮件,写入日志等),则必须将其转换回来。

一个好的做法是只在最后时刻应用这种转换。在插入数据库之前使用mysql_escape,在显示为HTML之前使用htmlentities(或htmlspecialchars)。这样你总能知道你的逃生功能应该在哪里。如果他们不在那里,你可以很容易地告诉你做错了什么。你也知道数据库中的数据总是干净的,你不需要记住你是否对它进行了编码,具有什么以及如何将其恢复。