Php htmlspecialchars()应该用于输入信息还是在输出之前使用?

Php htmlspecialchars()应该用于输入信息还是在输出之前使用?,php,html,xss,Php,Html,Xss,我获取$u POST信息并将其存储在数据库中,然后在查询时将此信息打印给用户。我应该在插入此信息之前使用htmlspecialchars(),还是在查询后再输出它 此外,我需要的用户有能力使用报价和其他日常特殊字符的能力。我知道我可以使用ENT_NOQUOTES标志,但感觉如果我这样做会留下安全漏洞 我的网站允许Bbcode,我希望用户能够使用日常字符,而不必看到“amp;lt;?&” 对我耐心点 我应该在插入此信息之前使用htmlspecialchars(),还是在查询后再输出它 在插入目标代

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

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

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

对我耐心点 我应该在插入此信息之前使用htmlspecialchars(),还是在查询后再输出它

在插入目标代码之前对其进行转义。i、 在输出之前

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

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

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

我的网站允许Bbcode


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

在输出之前使用htmlspecialchars(),以避免XSS。数据库应该更好地保存用户的原始输入

重复的(我支持这里给出的,尽管它的评级为-1)。更好地在输入上使用strip_标记@Marek谢谢,我想知道在这个过程中我可以在哪里添加strip_标记()。谢谢,伙计。在你输出它之前做这件事真的很重要,而不是在把它存储到数据库之前做这件事。原因有三:一,。正如Quentin在评论中提到的,您可能希望在其他地方使用数据(而不是HTML)。可能是RIA或移动应用程序。2.输出时,需要根据上下文进行转义。例如,如果您在像onclick这样的事件处理程序中输出javascript字符串中的数据,则htmlspecialchars将不会保护您。3.如果转义例程中存在错误,则可能会错误地转义数据库中的数据。可能是一个真正的痛苦,以后再修复。