htmlspecialchars()是否应该用于输入信息或输出之前?

时间:2011-08-30 15:11:49

标签: php html xss

我获取$ _POST信息并将其存储在数据库中,稍后查询并将此信息打印给用户。我应该在插入此信息之前使用htmlspecialchars(),还是在输出之前查询它?

此外,我需要用户能够使用引号和其他日常特殊字符的能力。我知道我可以使用ENT_NOQUOTES标志,但感觉就像我这样做会留下安全漏洞。

我的网站允许Bbcode,我希望用户能够使用日常字符,而不必看到“amp; lt;& lt;?& gt;&”。

对我的耐心< --- noob鼓励! 谢谢:D

2 个答案:

答案 0 :(得分:7)

  

我应该在插入此信息之前使用htmlspecialchars(),还是在输出之前查询它?

在插入目标代码之前转义目标代码的数据。即在输出之前。

这意味着您将数据保留为原始格式以用于其他目的(例如,输出给用户进行编辑,包括在电子邮件中,生成PDF,搜索等)

  

此外,我需要用户能够使用引号和其他日常特殊字符的能力。我知道我可以使用ENT_NOQUOTES标志,但感觉就像我这样做会留下安全漏洞。

htmlspecialchars()会将输入数据中的引号转换为HTML。所以你不需要做任何特别的事情。

  

我的网站允许使用Bbcode

然后你需要一个合适的BBCode解析器。

答案 1 :(得分:2)

在输出之前使用

htmlspecialchars()来避免XSS。数据库应该更好地保存用户的原始输入。