htmlspecialchars()应该在输入时还是输出前使用?

4

当我将$_POST信息存储在数据库中并稍后查询并将此信息打印给用户时,我应该在插入此信息之前或在查询输出之前使用htmlspecialchars()吗?

另外,我需要让用户能够使用引号和其他日常特殊字符。我知道我可以使用标志ENT_NOQUOTES,但如果这样做,会留下安全漏洞。

我的网站允许使用Bbcode,我希望用户能够使用日常字符而无需看到“amp;lt;<?>&”等内容。

鼓励对我有耐心的新手!谢谢 :D


1
重复的内容:更好的防止XSS攻击的方法(我仍然坚持我的答案,尽管它被评为-1)。 - phihag
1
最好在输入时使用strip_tags函数。http://php.net/manual/zh/function.strip-tags.php - Marek Sebera
@Marek 谢谢,我在想在这个过程中什么时候可以添加 strip_tags()。谢谢啊。 - KRB
2个回答

7
我应该在插入这些信息之前还是之后使用htmlspecialchars()?

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

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

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

htmlspecialchars()将把输入数据中的引号转换为HTML。因此,您不需要做任何特殊处理。

我的网站允许Bbcode

那么您需要一个合适的BBCode解析器。


1
在输出之前进行处理非常重要,而不是在将其存储到数据库之前进行处理。有三个原因:
  1. 正如Quentin的评论中所提到的,您可能希望在其他地方使用数据(而不是在HTML中)。可以是RIA或移动应用程序。
  2. 当您输出时,需要根据上下文进行转义。例如,htmlspecialchars将无法保护您,如果您在事件处理程序(如onclick)中的javascript字符串中输出数据。
  3. 如果转义例程中存在错误,则可能会错误地转义数据库中的数据。稍后修复可能会非常麻烦。
- Erlend

2

htmlspecialchars() 用于输出前避免XSS攻击。数据库最好保存用户的原始输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接