htmlspecialchars() 应该用于输入信息还是输出之前?
Posted
技术标签:
【中文标题】htmlspecialchars() 应该用于输入信息还是输出之前?【英文标题】:Should htmlspecialchars() be used on information on input or just before output? 【发布时间】:2011-08-30 15:11:49 【问题描述】:我获取 $_POST 信息并将其存储在数据库中,然后在查询时将此信息打印给用户。我应该在插入此信息之前使用 htmlspecialchars() 还是在输出之前查询它?
此外,我需要让用户能够使用引号和其他日常特殊字符。我知道我可以使用标志 ENT_NOQUOTES,但感觉如果我这样做会留下安全漏洞。
我的网站允许使用 Bbcode,我希望用户能够使用日常字符而不必看到“amp;lt;<?>&”。
对我有耐心
【问题讨论】:
与better way preventing xss attack 重复(我支持my answer,尽管它的评级为-1)。 最好在输入php.net/manual/en/function.strip-tags.php上使用strip_tags@ @Marek 谢谢,我想知道在这个过程中我可以在哪里添加 strip_tags()。谢谢大佬。 【参考方案1】:我应该在插入此信息之前使用 htmlspecialchars() 还是在输出之前查询它?
在插入之前转义目标代码的数据。即在你输出它之前。
这意味着您将保留原始形式的数据用于其他目的(例如输出给用户进行编辑,包括在电子邮件中、生成 PDF、搜索等)
此外,我需要让用户能够使用引号和其他日常特殊字符。我知道我可以使用标志 ENT_NOQUOTES,但感觉如果我这样做会留下安全漏洞。
htmlspecialchars()
会将输入数据中的引号转换为 HTML。所以你不需要做任何特别的事情。
我的网站允许使用 Bbcode
那么你需要一个合适的 BBCode 解析器。
【讨论】:
在输出之前做它而不是在将它存储到数据库之前做它真的很重要。有三个原因: 1. 正如 Quentin 的评论中提到的,您可能希望在其他地方使用数据(而不是在 HTML 中)。可以是 RIA 或移动应用程序。 2.输出时需要根据上下文进行转义。例如,如果您在 onclick 等事件处理程序中的 javascript 字符串中输出数据,则 htmlspecialchars 不会保护您。 3.如果转义例程中存在错误,您可能会错误地转义数据库中的数据。以后修复可能会很痛苦。【参考方案2】:htmlspecialchars()
在输出之前使用以避免 XSS。并且数据库应该更好地保存用户的原始输入。
【讨论】:
以上是关于htmlspecialchars() 应该用于输入信息还是输出之前?的主要内容,如果未能解决你的问题,请参考以下文章
htmlspecialchars() - 如何以及何时使用和避免多次使用
如何修复 htmlspecialchars() 期望参数 1 是字符串,给定数组