在插入DB之前输入PHP htmlentities(),而不是输出

gra*_*sty 7 php security

我想知道在执行以下程序时是否存在任何缺点或不良做法:

  1. $ user_input - > htmlentities($ user_input) - > mysql_escape($ user_input) - >将$ user_input插入DB
  2. 从DB中选择$ user_input - > echo $ user_input

而不是做以下事情:

  1. $ user_input - > mysql_escape($ user_input) - >将$ user_input插入DB
  2. 从DB中选择$ user_input - > echo htmlentities($ user_input)

当我们在很多地方显示相同的$ user_input时,对输入感觉更有效率,这样做是否有任何缺点/不良做法/漏洞利用能力?

干杯!

对以下问题的回复很好:

@Matt:一般来说,为了保持可读性和可维护性,请尽量将其存储为尽可能接近原始未经过滤的内容.这取决于两件事:是否有其他人/程序会引用这些数据?数据是否需要易于编辑?

@Sjoerd:如果你想将数据显示为除HTML之外的其他内容,例如CSV下载,PDF等,则存在缺点.

Mat*_*att 3

这取决于两件事:

  • 是否有其他人/程序会引用此数据?
  • 数据是否需要易于编辑?

方法一的优点是,如果数据只用在一个地方htmlentities()每次都会调用,就可以省去这一步。

然而,如果 HTML 数据非常大,这只会带来显着的改进。一般来说,为了保持内容的可读性和可维护性,请尝试将其存储为尽可能接近原始的、未经过滤的内容。

事实上,您可能会发现无论如何存储 HTML 都是错误的。最好存储像Markdown这样的东西,然后在查看时将其转换为 HTML。