博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【PHP】富文本HTML过滤器:HTMLPurifier使用教程(防止XSS)
阅读量:6423 次
发布时间:2019-06-23

本文共 1907 字,大约阅读时间需要 6 分钟。

在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤,XSS就是需要重视的一点,先说一下什么是XSS,简单来说就是用户提交数据(例如发 表评论,发表日志)时往Web页面里插入恶意javascript代码例如死循环,疯狂的alert,这还不算还可能会修改页面页面上的html元素(例 如登录表单的action),这样当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到用户的特殊目的。

在使用PHP开发时,可以使用htmlspecialchars将用户提交过来的数据转换使之原样显示,但是这样一来会造成一些弊端,比如用户上传的图片 无法显示,html标签不会起作用,没有任何样式。解决方案就是可以使用UBB标签或者自定义标签来实现,要么就是自己写正则去过滤,但是防不胜防,并且 这样在处理起来有些繁琐。下载重点介绍一个开源的HTMLPurifier,这是一个符合W3C标准的HTML过滤器,可以生成标准的HTML代码,并且 有很多的自定义配置,我更关注的是可以过滤掉javascript代码,有效的防止XSS!

安装

使用composer安装

> composer require ezyang/htmlpurifierUsing version ^4.9 for ezyang/htmlpurifier./composer.json has been updatedLoading composer repositories with package information Updating dependencies (including require-dev) - Installing ezyang/htmlpurifier (v4.9.3) Downloading: 100% Writing lock file Generating autoload files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后将vendor/autoload.php 引入项目中,即可使用

用法

$dirty_html=<<

Hello EOF; $config = \HTMLPurifier_Config::createDefault(); $purifier = new \HTMLPurifier($config); $clean_html = $purifier->purify($dirty_html); dump($clean_html);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出结果如下:

Hello

  • 1
  • 2

过滤了XSS代码,过滤规则: 

自动填充了残缺的标签

使用配置

$config = \HTMLPurifier_Config::createDefault();  // something.... $purifier = new \HTMLPurifier($config);
  • 1
  • 2
  • 3

例如

function actionHtmlpurifer()    {        $dirty_html=<<

Hello EOF; $config = \HTMLPurifier_Config::createDefault(); //$config->set('HTML.Allowed', '');//过滤掉所有的HTML标签 //输出 Hello $config->set('HTML.Allowed', 'h1,a[href]');//保留超链接标签a及其href链接地址属性,还有h1标签 $config->set('HTML.TargetBlank', true);//并自动添加target属性值为’_blank’ //输出

Hello

$purifier = new \HTMLPurifier($config); $clean_html = $purifier->purify($dirty_html); dump($clean_html); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
// 让文本自动添加段落标签,前提是必须允许P标签的使用$config->set('HTML.Allowed', 'p'); $config->set('AutoFormat.AutoParagraph', true); // 清除空标签 $config->set('AutoFormat.RemoveEmpty', true);
  • 1
  • 2
  • 3
  • 4
  • 5

详细的配置规则:

转载地址:http://gygra.baihongyu.com/

你可能感兴趣的文章
QTP解决内嵌IE窗体方法2
查看>>
“王子”的演讲:N828印象
查看>>
判断JS字符串中是否包含某些字符
查看>>
Phalanger---PHP的.NET编译器
查看>>
Scanner----java控制台和文件读取的利器(java 5新增)
查看>>
如何安全设定和检测你的密码安全性?
查看>>
一例HP ADG数据恢复成功(8×73GB SCSI)
查看>>
虚拟化系列-Citrix XenServer 6.1 XenMotion与HA
查看>>
TFS创建团队项目(三)
查看>>
对发展的一点小感想
查看>>
示例化讲解RIP路由更新机制
查看>>
eclipse不能自动编译工程的解决方法
查看>>
Powershell管理系列(九)删除Exchange用户邮箱中多余的电子邮件地址
查看>>
Swt/Jface进度条
查看>>
.NET建议使用的大小写命名原则
查看>>
Git:错误:error:src refspec master does not match any
查看>>
SSIS 数据类型和类型转换
查看>>
Oracle数据库“Specified cast is农田valid”
查看>>
数据层新思路,写数据库无关的数据层 ORM在数据库内做更为合适
查看>>
armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】
查看>>