【问题标题】:Securing site against XSS attacks保护站点免受 XSS 攻击
【发布时间】:2011-12-07 12:10:54
【问题描述】:

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

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

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

【问题讨论】:

  • 或者只是修复您的代码以防止 XSS?贴膏药安全。

标签: php .htaccess xss pci-dss


【解决方案1】:

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

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

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


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      是的,我确实相信。发现于 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/

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-07
          • 1970-01-01
          • 2016-10-28
          • 1970-01-01
          • 2011-05-14
          • 1970-01-01
          • 2020-03-04
          • 1970-01-01
          相关资源
          最近更新 更多