代码之家  ›  专栏  ›  技术社区  ›  Patrick Cornelissen

有没有好的基于PHP的HTML过滤器?

  •  12
  • Patrick Cornelissen  · 技术社区  · 14 年前

    我目前在一个具有PHP前端的项目中。我们非常关注安全性,因为我们会有很多用户,并且是黑客的一个吸引人的目标。我们的用户可以提交其他用户以后可以看到的HTML格式的内容。这是一个大问题,因为我们容易受到整套XSS攻击的攻击。我们正在尽可能地过滤,但是攻击向量的多样性非常大。

    所以,我在搜索基于PHP的HTML清理/过滤解决方案。商业解决方案很好(甚至更可取)。目前我们正在使用一个修改过的HTML净化器,但是我们对结果不满意。

    哪些好的库/工具能够过滤HTML的恶意部分?

    很高兴有HTML5意识,一旦它“在野外”可用,它将成为一个安全噩梦。

    更新: 我们正在对 HTML Purifier . 看起来我们以前使用的旧框架根本没有配置它。现在结果看起来好多了。

    7 回复  |  直到 12 年前
        1
  •  7
  •   Jon Winstanley    14 年前

    HTML净化器项目

    就我个人而言,我在 HTML Purifier project

    它是高度可定制的,拥有庞大的代码基础。唯一的问题是将文件上载到服务器。

    您确定您的安装没有配置问题吗?因为如果配置正确,净化器根本不应该让任何HTML标签通过。

    从网站:

    HTML净化器符合标准 用PHP编写的HTML过滤器库。 HTML净化器将不仅删除所有 恶意代码(通常称为 xss)经彻底审计,
    安全但允许的白名单,它 还将确保您的文档 符合标准,仅限于 通过综合 了解W3C规范。
    由于 当前景观不足或
    不安全的HTML过滤器?有一个
    Wysiwyg编辑,但从未能够 用它吗?追求高品质, 符合标准、开源 该应用程序的组件 你在建?HTML净化器用于 你!

    我写了一篇关于如何使用 HTML purifier library with CodeIgniter 在这里。

    也许它可以帮助你再次尝试:

    // load the config and overide defaults as necessary
    $config = HTMLPurifier_Config::createDefault();
    $config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional');
    $config->set('HTML', 'AllowedElements', 'a,em,blockquote,p,strong,pre,code');
    $config->set('HTML', 'AllowedAttributes', 'a.href,a.title');
    $config->set('HTML', 'TidyLevel', 'light'); 
    
        2
  •  2
  •   fire    14 年前

    CodeIgniter 有一个优秀的XSS过滤器,如果你想把它作为一个独立的函数,你可以把它从system/libraries/input.php文件中去掉。

        3
  •  1
  •   Mathias Bynens    14 年前

    kses 很好用。您可以很容易地指定允许和不允许哪些元素,因此让它HTML5感知只需设置一个数组即可。

    WordPress使用它,所以我猜它相当安全;)

        4
  •  1
  •   alexn    14 年前

    我真的可以推荐 kses 用于HTML筛选。实际上,这就是WordPress所使用的。它是免费和开源的。

        5
  •  1
  •   Brian Lacy    14 年前

    我以前上过这门课,并且取得了相当不错的成绩: http://www.phpclasses.org/browse/package/2189.html

        6
  •  1
  •   Peter Mortensen stimpy    14 年前

    您可以使用当前的解决方案并添加具有不同基本URL的iframe来显示内容。更改iframe上的基URL将禁止从内部javascript代码访问主页面。也就是说,如果您的URL是 http://www.yoururl.com/thread/500 您可以在iframe中使用它来显示内容,例如:http://yoururl.com/thread/500/coment/1、http://yoururl.com/thread/500/coment/2。

    您可以设置的基本URL可以依赖于您的DNS/主机配置。

    这不是解决问题的方法,而是跳过去解决问题,尽管在找到其他解决方案之前它是有用的。

        7
  •  0
  •   Sebass van Boxel    12 年前

    HTML净化器可能会起作用,但我要说的是,文件夹结构过于复杂和浮华。数百行评论、一个名为“测试”的文件夹、一个许可证文件、读取MES和信息文件、图片、另一个用于吸烟测试的文件夹(完全滥用)、附加文件、配置文件、基准测试文件,最重要的是,大约10种不同的CMS兼容模式、其网站上的证明、完整版本、精简版本、Husky、稍微丰满,唐氏综合征和全谱政治正确的程序变异。