之前有人问过这个问题,但我需要 100% 清楚这个问题,因为正确处理对我来说非常重要。
情况:网站上的消息系统。用户在文本框中输入一条消息,他们提交表单并将其输入到数据库中。然后可以从数据库中调用此数据并在 <span>
中显示标记给另一个用户。
我需要采取什么安全程序来防止这些数据被恶意使用?我已经使用 mysql_real_escape_string 来停止任何注入(inject),strip_tags 似乎很有用,但我听说过很多其他名称。考虑到它仅显示在 <span>
中,我需要使用什么来保护此数据?标签?
谢谢。
最佳答案
误解是想对输入进行转义,这是错误的。您必须过滤输出(数据库也是一个输出)。
表示提交表单时,使用mysql_real_escape_string()
向数据库发送(输出)数据,使用htmlspecialchars()
输出内容屏幕上。同样的原则也适用于正则表达式,您可以在其中使用 preg_quote()
等。
无论数据来自何处,您都必须在发送数据的目的地上下文中对其进行转义。
所以为了防止XSS攻击,必须使用htmlspecialchars()
/htmlentities()
。 mysql_real_escape_string
与XSS无关(但在向数据库发送数据时仍然必须使用它)。
关于PHP XSS 问题/说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286267/