PHP XSS问题/澄清

Jam*_*mes 6 php xss

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

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

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

谢谢.

Max*_*sky 3

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

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

无论数据来自何处,您都必须在将其发送到的上下文中对其进行转义。

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

  • James,他在某种意义上提到了“preg_quote”,“使用正确的工具完成正确的工作”=“使用正确且推荐的函数来转义某些域/上下文的输入(htmlspecialchars 用于 html,mysqli_real_escape_string 用于 mysql dbs,准备语句几乎任何数据库,preg_quote 用于与 perl 兼容的正则表达式,escapeshellarg/escapeshellcmd 用于 shell 命令等)« (2认同)