PHP htmlentities() 在数据库插入之前输入,而不是输出

标签 php security

我想知道执行以下过程是否有任何缺点或不良做法:

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

而不是执行以下操作:

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

当我们在很多地方显示相同的 $user_input 时,感觉在输入上更有效,这样做有什么缺点/不好的做法/利用能力吗?

干杯!

问题的良好回复来自:

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

@Sjoerd:如果您想将数据显示为 HTML 以外的其他内容,例如CSV 下载、PDF 等。

最佳答案

这取决于两件事:

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

方法一的优点是,在一个地方使用数据的情况下,每次都会调用htmlentities(),你会省去这一步。

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

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

关于PHP htmlentities() 在数据库插入之前输入,而不是输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3023728/

相关文章:

php - 如何将jquery中.post传递的数组数据获取到php中?

c# - 方法在应该返回 'true' 时返回 'false'

.net - 代码访问安全是个笑话?

java.security.AccessControlException : access denied ("java.security.SecurityPermission" "authProvider.SunMSCAPI")

php - Symfony2 : Why is the Request passed to a Kernel. 在 Symfony2 中终止受 AppCache 影响的 EventListener

php - Magento,获取所有产品,不仅是活跃的

php - 如何在存储过程中添加where条件作为参数?

javascript - 如果未登录,则限制对 js 文件的访问

java - Java SSLSockets 是否需要提供的 SSL 证书?

php - 控制字符问题 - PHP 不打印\t(制表符)