Heim >php教程 >php手册 >PHP下使用富文本过滤器 HTML Purifier 防止xss跨站攻击

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

WBOY
WBOYOriginal
2016-05-23 08:33:4238512Durchsuche

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(&#39;xss&#39;)</script>

XSS 输入攻击也可能是 HTML 代码段,譬如:

(1).网页不停地刷新

(2).嵌入其它网站的链接

对于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(&#39;HTMLPurifier/library/HTMLPurifier.auto.php&#39;); 
$config = HTMLPurifier_Config::createDefault(); 
$purifier = new HTMLPurifier($config); 
$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);

详细的配置规则:http://htmlpurifier.org/live/configdoc/plain.html


文章链接:

随便收藏,请保留本文地址!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn