PHP下使用富文本过滤器 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);
 
$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

时间: 2024-08-03 18:54:11

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

在ASP.Net MVC框架下使用富文本编辑器

学了一段时间的ASP.Net MVC框架,想用ASP.Net MVC框架做一个Blog的小程序.找了半天也没有找到一个好用的可以直接在MVC框架下调用的好富文本编辑器.也许可以直接在MVC框架中引用原来asp.net webform的一些组件,不过总感觉不大舒服,所以计划自己动手写一个.我首先想到了FCKEditor,它其实是一个与平台无关的富文本编辑器,他可以在java,asp,asp.net webform环境下运行,当然也可以在ASP.Net MVC框架下使用.今天自己动手试了一下发现效果

使用富文本OHAttributedLabel

OHAttributedLabel 富文本标签 https://github.com/AliSoftware/OHAttributedLabel 以下是我渲染出来的效果 OHAttributedLabel This class allows you to use a UILabel with NSAttributedStrings, in order to display styled text with various style (mixed fonts, color, size, ...)

在微信小程序中使用富文本转化插件wxParse

在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个富文本转化插件wxParse,方便我们使用,前人种树后人乘凉,我们使用它来解析HTML就很方便了,这对于我们在后端已经完成的一些HTML内容,展示在小程序里就非常不错. 这个插件的Github地址如下:wxParse-微信小程序富文本解析组件,官方称它支持支持HTML及markdown解析,我这里主

如何在eclipse rcp中使用富文本编辑器(rich editor)

使用eclipse rcp开发自己的应用程序时,经常需要使用到格式文本的编辑与展示.但在SWT/JFACE组件中并未提供合适的组件来完成此任务,Text与我们的要求相差甚远.我的OA系统中公文的正文部分需要一个合适的rich editor来完成此任务. 于是蛮世界的寻找适合的java rich editor组件来完成这个需求,最后寻得两个比较容易在eclipse rcp中采用的技术方案,这两个方案我都在我的系统中应用过 1.使用ekit组件,ekit是不多的开源java rich editor组

添加图片 文本-aspnet的考试添加考题,要求题干和选项可以添加图片和文本,不用富文本框该怎么实现

问题描述 aspnet的考试添加考题,要求题干和选项可以添加图片和文本,不用富文本框该怎么实现 一个考试系统的考题管理,添加单选题时,要求题干和选项都可以添加文本和图片,不可以使用富文本框.谁有过类似的经验?能帮忙解决一下吗?谢谢了 解决方案 直接用html就可以了.有很多html的编辑器,比如fkceditor,自己google下用法

lotus表单中勾选某一列前的复选框,则这个列下的富文本域由灰色,变成可以上传的正常状态?怎么做?

问题描述 lotus表单中勾选某一列前的复选框,则这个列下的富文本域由灰色,变成可以上传的正常状态?怎么做? 可以在表单中做到这样的效果吗:勾选某一列前的复选框,则这个列下的富文本域由灰色(不可上传),变成可以上传的正常状态?怎么做?

Python使用reportlab将目录下所有的文本文件打印成pdf的方法

  本文实例讲述了Python使用reportlab将目录下所有的文本文件打印成pdf的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 # -*- coding: utf8 -*- #~ #------------------------------------------------

vim文本高亮-centos6.0下vim打开文本时,所有字符高亮如何消除?

问题描述 centos6.0下vim打开文本时,所有字符高亮如何消除? vim打开的文件内容全部铺满浅绿色,在编写C/C++程序时无法区分字符高亮!应该是/etc/vimrc内容被不小心更改了,求指导! 解决方案 syntax on 打开语法高亮 如果是新装有linux 这个高亮显示是有条件的,具体什么条件,我也不清楚.如下: if &t_Co > 2 || has("gui_running") 50 syntax on 51 set hlsearch 52 endifh

Linux环境下使用图形化界面的SVN客户端软件-RabbitVCS

如果想在Linux环境下使用图形化界面的SVN客户端软件,那么RabbitVCS绝对是首选,可以媲美Windows环境下用的TortoiseSVN,甚至连操作都基本一样,所以强烈推荐给各位童鞋. RabbitVCS基本支持所有的Linux发行版本包括Ubuntu.Debian.Fedora.Arch Linux.Gentoo.Mandriva.OpenSUSE.RHEL.CentOS 5等.其官网地址为http://www.rabbitvcs.org/ 在ubuntu下安装 首先添加源: sud