以前曾经问过这个问题,但我需要100%明确这个问题,因为这对我来说非常重要.
情况:网站上的消息系统.用户在文本框中输入消息,他们提交表单并将其输入数据库.然后,可以从数据库调用此数据,并在<span>标签内显示给另一个用户.
我需要采取哪些安全措施来防止此数据被恶意攻击?我已经使用mysql_real_escape_string来停止任何注入,而strip_tags看起来很有用,但我听说过很多其他名字.考虑到它仅显示在<span>标签中,我需要使用什么来保护这些数据?
谢谢.
误解是您想要转义输入,这是错误的。您必须过滤输出(数据库也是输出)。
这意味着当提交表单时,您用于mysql_real_escape_string()将数据发送(输出)到数据库,并且您用于htmlspecialchars()将内容输出到屏幕上。同样的原则也适用于正则表达式,您可以在其中使用preg_quote(),等等。
无论数据来自何处,您都必须在将其发送到的上下文中对其进行转义。
因此,为了防止XSS攻击,必须使用htmlspecialchars()/ htmlentities()。mysql_real_escape_string与XSS无关(但在向数据库发送数据时仍然必须使用它)。