设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP下使用富文本过滤器 HTML Purifier 防止xss跨站攻击

发布时间:2022-02-23 14:36 所属栏目:121 来源:互联网
导读:CMS为了文章编辑内容,都会在后台集成在线编辑器,如FCKEditor等,但是这种很容易XSS跨站攻击,以下我们来看一下使用 HTML Purifier 如何防止xss跨站攻击. 随着html可视即可得编辑器的流行,很多网站使用了这样的编辑器,比如FCKEditor、百度UEditor编辑器等等。
  CMS为了文章编辑内容,都会在后台集成在线编辑器,如FCKEditor等,但是这种很容易XSS跨站攻击,以下我们来看一下使用 HTML Purifier 如何防止xss跨站攻击.
 
  随着html可视即可得编辑器的流行,很多网站使用了这样的编辑器,比如FCKEditor、百度UEditor编辑器等等。
 
  跨站脚本攻击(XSS)已经不是什么新鲜的话题了,甚至很多大公司也为此吃尽苦头,最简单直接的防范方法,就是不允许任何html标签输入,对用户输入进行编码(htmlencode).
 
  但是如果想用户输入支持一些格式,怎么办?一种办法就是很多论坛采用的BB Code的方法,使用特定的标签代替一些格式,比如:[ B ]表示粗体,等等,但是,BB Code这种形式并不被广泛接受,它的表现力实在太差了,而且并不是标准格式.
 
  为了让用户的输入更具表现力,涌现了大量的Html编辑器控件,著名的有FCKEditor,FreeTextBox,Rich TextBox,Cute Editor,TinyMCE等等。我个人比较喜欢Cute Editor,功能强大,性能不错,而且容易定制。
 
  使用这些Html编辑器控件的潜在危险,是用户可能会输入一些危险字符,注入到网站中,形成XSS攻击。一个最简单的输入就是:
 
  <script>alert('xss')</script>
 
  XSS 输入攻击也可能是 HTML 代码段,譬如:
 
  (1).网页不停地刷新 <meta http-equiv="refresh" content="0;">
 
  (2).嵌入其它网站的链接 <iframe src=http://xxxx width=250 height=250></iframe>
 
  对于PHP开发者来说,如何去防范XSS攻击呢?(php防止xss攻击的函数),这里飘易推荐HTML Purifier工具.
 
  HTML Purifier官网:http://htmlpurifier.org/
 
  HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。
 
  HTML Purifier,这是一个符合W3C标准的HTML过滤器,可以生成标准的HTML代码,并且有很多的自定义配置,可以过滤掉javascript代码等,有效的防止XSS!
 
  一、使用HTML Purifier的要求
 
  HTML Purifier 只需要PHP 5.0.5以及以上版本,并且不需要其他核心组件的支持。HTML Purifier 不兼容  zend.ze1_compatibility_mode。
 
  以下5个是可选扩展,可以增强HTML Purifier的性能(can enhance the capabilities of HTML Purifier):
 
  * iconv  : Converts text to and from non-UTF-8 encodings
  * bcmath : Used for unit conversion and imagecrash protection
  * tidy   : Used for pretty-printing HTML
  * CSSTidy : Clean CSS stylesheets using %Core.ExtractStyleBlocks
  * Net_IDNA2 (PEAR) : IRI support using %Core.EnableIDNA
  使用前请阅读HTML Purifier详细安装说明:http://htmlpurifier.org/live/INSTALL
 
  二、基本用法
 
  默认下,使用UTF-8编码,和XHTML 1.0 Transitional文档类型.
 
  require_once('HTMLPurifier/library/HTMLPurifier.auto.php');
  $config = HTMLPurifier_Config::createDefault();
  $purifier = new HTMLPurifier($config);
  //开源软件:Cuoxin.com
  $dirty_html = <<<EOF   
  <h1>Hello   
  <script>alert("world");</script>   
  EOF;
  $cleanHtml = $purifier->purify($dirty_html);
  //输出:
  <h1>Hello   
  </h1>   
  过滤了XSS代码,过滤规则:http://htmlpurifier.org/live/smoketests/xssAttacks.php
 
  自动填充了残缺的标签
 
  三、使用配置
 
  配置主要用于设置规则,使用比较简单.
 
  $config = HTMLPurifier_Config::createDefault();   
  // something....   
  $purifier = new HTMLPurifier($config);   


    

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读