PHP XSS问题/澄清

时间:2011-09-02 16:09:29

标签: php xss

以前曾经问过这个问题,但我需要100%明确这个问题,因为这对我来说非常重要。

情况:网站上的消息系统。用户在文本框中输入消息,他们提交表单并将其输入数据库。然后,可以从数据库中调用此数据,并将<span>标记显示在另一个用户中。

我需要采取哪些安全措施来防止此数据被恶意攻击?我已经使用mysql_real_escape_string来停止任何注入,并且strip_tags看起来很有用,但我听到很多其他提到的名字。我需要使用什么来保护这些数据,因为它只显示在<span>标签中?

谢谢。

3 个答案:

答案 0 :(得分:3)

在HTML页面上输出时使用htmlspecialchars。它将以与用户输入数据相同的方式显示数据(因此用户可以在其消息中使用<3之类的内容,而不会删除其余内容)

答案 1 :(得分:3)

误解是你想要逃避输入,这是错误的。您必须过滤输出(数据库也是输出)。

这意味着在提交表单时,您使用mysql_real_escape_string()将数据发送(输出)到数据库,然后使用htmlspecialchars()在屏幕上输出内容。同样的原则适用于正则表达式,您可以使用preg_quote(),等等。

无论数据来自何处,您都必须在发送数据的环境中将其转义。

因此,为了防止XSS攻击,您必须使用htmlspecialchars() / htmlentities()mysql_real_escape_string与XSS无关(但在向数据库发送数据时仍需使用它。)

答案 2 :(得分:0)

请查看OWASP XSS预防备忘单。它将解释如何针对不同的上下文避免使用XSS。 Htmlentities应该在标签之间完成工作。