1

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

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

.htaccess 中有没有办法去除任何恶意脚本标签并将用户重定向到另一个页面?还是我在叫错树?

4

4 回答 4

3

最好的方法是不信任代码中的用户输入。例如,如果不通过h​​tmlspecialchars或类似方式运行用户提供的数据,切勿将其回显到浏览器。这与 SQL 注入攻击属于同一类别,只是注入针对的是生成的 HTML 代码而不是 SQL 查询。

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

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


还有用于 Apache 的ModSecurity扩展,它可以捕获大多数此类攻击,但它并非万无一失,因为几乎有无穷无尽的方法来制作注入。因此,只有在您已经保护了应用程序代码但担心您可能会因将来的错误而错过某些东西(这可能以某种方式发生在我们大多数人身上)时,才应该使用 ModSecurity。

于 2011-12-07T12:14:34.153 回答
1

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

于 2011-12-07T12:12:53.230 回答
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/

于 2013-06-22T16:19:57.390 回答
0

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

于 2014-03-15T15:45:30.993 回答