2011-08-30 43 views
4

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

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

我的网站允许设置高亮,我希望用户能够日常使用的字符,而不必查看“放大器; LT; & LT ;? & GT; &”。

耐心与我< --- noob被鼓励! 感谢:d

+0

只是在输出前 – dynamic

+1

[防止xss攻击的更好的方法]的副本(http://stackoverflow.com/questions/6484493/better-way-preventing-xss-attack)(我支持[我的回答](http ://stackoverflow.com/questions/6484493/better-way-preventing-xss-attack)在那里,虽然它的评分为-1)。 – phihag

+1

更好使用strip_tags输入http://php.net/manual/en/function.strip-tags.php –

回答

7

我应该使用插入此信息或之后I I输出前查询之前用htmlspecialchars()?

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

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

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

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

我的网站允许设置高亮

然后,你需要有一个适当的BBCode解析器。

+0

感谢您的快速回答! – KRB

+1

在将它存储到数据库中之前,先输出它,而不是在做之前做到这一点非常重要。 有三个原因: 1.正如Quentin的评论所述,您可能想要在别处使用数据(而不是HTML)。可能是RIA或移动应用程序。 2.输出时,您需要根据上下文进行转义。作为一个例子,如果你在像onclick这样的事件处理程序中输出JavaScript字符串内的数据,htmlspecialchars将无法保护你。 3.如果在转义例程中存在错误,您可能会错误地转义数据库中的数据。可能是一个真正的痛苦后来修复。 – Erlend

1

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

相关问题