保护站点免受XSS攻击

时间:2011-12-07 12:10:55

标签: php .htaccess xss pci-dss

我有一个电子商务网站,必须符合PCI标准。我遇到的问题是它在XSS攻击时失败了:

www.mydomain.com?qs=%3c%2fscript%3e%3c script%3ealert(12345)%3c%2fscript%3e

.htaccess中是否有办法删除任何恶意脚本标记并将用户重定向到另一个页面?还是我在错误的树上吠叫?

4 个答案:

答案 0 :(得分:3)

最好的方法是不要信任代码中的用户输入。例如,永远不要将用户提供的数据回送到浏览器,而不通过htmlspecialchars或类似的方式运行它。这与SQL注入攻击属于同一类别,但注入的目标是生成的HTML代码,而不是SQL查询。

用户提供的数据是可能从客户端篡改的所有数据。这包括:$ _POST,$ _GET,文件上传,cookie和HTTP标头(如User-Agent和Referer)。必须始终将此类数据视为不可信,并且需要为每个上下文保护这些数据。您要将数据插入数据库吗?在将数据放入查询之前将其转义(或使用预准备语句)!你打算将它输出到用户的浏览器吗?逃离htmlspecialchars!它应该是一个电子邮件地址吗?在插入电子邮件之前确保它确实存在!

请注意,即使将数据保存到数据库中,某些上下文的数据也可能不安全。例如,正确SQL转义的$ _POST数据可能仍然包含HTML标记或其他XSS数据,因此在将其发送到浏览器之前需要对其进行转义(我在这里要说的是{{1} } label不会因为您将数据保存在数据库或文件中而消失。防止这种情况的一个好方法是尽可能延迟 转义(例如,在回显之前的htmlspecialchars),以确保使用的转义方法是对于此上下文而言是正确的,但也要尽可能验证 早期(不要首先接受无效数据,例如,验证电子邮件地址和如果它无效则抛出错误。)


还有Apache的ModSecurity扩展可以捕获大部分攻击,但它并非万无一失,因为有几乎无穷无尽的方法来制作注入。因此,只有当您已经保护应用程序代码但又担心由于未来的错误(可能以某种方式或其他方式发生在我们大多数人身上)时您可能会遗漏某些内容时,才应使用ModSecurity。

答案 1 :(得分:1)

为什么不清理代码中的$ _GET变量?

答案 2 :(得分:0)

是的,我确实相信。发现于 http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://mydomain.site/page/%1.pdf [R=302,L]

注意正则表达式。这应该意味着你可以设计你的正则表达式来适应你想要阻止的事情。谷歌正则表达式参考并看到它们中的大量。

请记住,htaccess文件会影响其所在的任何目录和所有子目录。 这里有很多好的.htaccess提示,包括重定向http://www.sitepoint.com/htaccess-for-all/

答案 3 :(得分:0)

检查以下htaccess方法是否有助于您的情况 http://wp-mix.com/block-xss-htaccess/

相关问题