【问题标题】:DOM and remove tag againnst xss attack way to optimize it?DOM 和 remove tag 对抗 xss 攻击的方式有优化吗?
【发布时间】:2011-11-04 09:40:16
【问题描述】:

我的一个朋友贴了一段关于如何使用 DOM 防止 xss 攻击的代码。

你觉得这段代码怎么样? 我们可以优化它吗?

<?php
    function parseDoc(DOMDocument $codeHtml){
      $forbiddenTag=array('script');
      $forbiddenAttr=array('onmouseover','onmouseup','onclick');
      foreach($forbiddenTag as $tag){
        $liste=$codeHtml->getElementsByTagName($tag);
        foreach($liste as $element){
          $codeHtml->removeChild($element);
        }
      }
      stripAttr($codeHtml,$forbiddenAttr);
    }

    function stripAttr(DOMNode $root, array $forbiddenAttr){
     foreach($rootl->childNodes as $child){
        foreach($forbiddenAttr as $attr){
          if($child->hasAttribute($attr)) $child->removeAttribute($attr);

        }.
        if($child->hasChildNodes())strippAttr($child,$forbiddenAttr);
      }
    }

【问题讨论】:

    标签: php dom tags detection xss


    【解决方案1】:

    这不是对抗 XSS 的正确方法。

    您使用的黑名单将永远无法捕捉到包含脚本的所有方式。例如,您没有捕获 onload 属性或 javascript: 链接。相反,始终使用 DOM 方法来构造文本节点和属性值,默认情况下您将是安全的。如果您想让用户允许格式化文本,请使用允许的元素、属性和属性值的白名单

    【讨论】:

    • @Zeroth 我不知道该名称的任何 php 函数。你能提供一个链接吗?
    • 抱歉来晚了,我想得不好:en.wikipedia.org/wiki/DOM_Events
    • 如果我对您的理解正确,您希望将所有 DOM 事件的列表用作黑名单。请注意,除了事件属性(以及某些浏览器中的 &lt;s\0cript&gt;JavaScript in style sheets 等奇怪的东西)之外,还有其他方法可以包含 JavaScript。此外,将来会有新的 DOM 事件,您现在可能无法处理。你真的应该改用白名单。
    • 我不知道可以在 CSS 表格中包含 JS...实际上哪些 DOM 事件可能对 XSS 攻击非常危险?
    • 改用 htmlpurifier。它基于白名单。建立 DOM 事件黑名单是一个坏主意,因为 HTML5 不断发展并添加新事件。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2017-03-30
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多