以前曾经问过这个问题,但我需要100%明确这个问题,因为这对我来说非常重要。
情况:网站上的消息系统。用户在文本框中输入消息,他们提交表单并将其输入数据库。然后,可以从数据库中调用此数据,并将<span>
标记显示在另一个用户中。
我需要采取哪些安全措施来防止此数据被恶意攻击?我已经使用mysql_real_escape_string来停止任何注入,并且strip_tags看起来很有用,但我听到很多其他提到的名字。我需要使用什么来保护这些数据,因为它只显示在<span>
标签中?
谢谢。
答案 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应该在标签之间完成工作。