White HTML Filter

基于 PHP 的白名单过滤器
授权协议 Apache
开发语言 PHP
所属分类 Web应用开发、 常用JavaScript包
软件类型 开源软件
地区 国产
投 递 者 司徒元明
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

White HTML Filter

简介

XSS是什么就不介绍了,很多时候因为老板的需求之类的,必须用到UEditor之类的HTML富文本编辑器,这时候XSS防御就很重要了。

很多人会选择用strip_tags()之类的来去除HTML标记,但是去除了标签,还有onclick之类的危险属性。而且过滤了属性,对于必须通过iframe插入HTML5视频的情况,还要过滤属性的值。

一个常见做法是用正则表达式来切分HTML字符串,然后得到多个多维数组,利用黑名单过滤完后再拼接回HTML,这种方法因为解析HTML的方式跟浏览器不同,所以很容易被绕过。

这款工具应运而生,使用基于与浏览器解析HTML方式一致的标记化算法(The Tokenization Algorithm)的DOMDocument来解析HTML,然后利用白名单来过滤HTML标签、属性、乃至属性值。

使用方法

1、引入

composer require lincanbin/white-html-filter

2、使用

use lincanbin\WhiteHTMLFilter;
 
//跨站脚本白名单过滤
function XssEscape($html)
{
   $filter = new WhiteHTMLFilter();
   $urlFilter = function($url) {
      $token = parse_url($url);
      if (empty($token['scheme']) || in_array($token['scheme'], array('http', 'https')) === false) {
         return '';
      }
      $hostWhiteList = array(
         'www.youtube.com', 'youtube.com', 'www.youtu.be', 'youtu.be',
         'player.youku.com', 'v.youku.com',
         'video.tudou.com', 'www.tudou.com',
         'player.video.qiyi.com', 'open.iqiyi.com',
         'imgcache.qq.com', 'v.qq.com',
         'static.hdslb.com',
         //'www.le.com',
         'share.vrs.sohu.com', 'tv.sohu.com',
         'player.pptv.com',
         'cdn.aixifan.com',
         'v.ifeng.com',
         'video.sina.com.cn',
         'galaxy.bjcathay.com'//CNTV
      );
      if (empty($token['host']) || in_array($token['host'], $hostWhiteList) === false) {
         return '';
      }
      return $url;
   };
 
   $iframeRule = array(
      'iframe' => array(
         'src' => $urlFilter,
         'width',
         'height',
         'frameborder',
         'allowfullscreen'
      )
   );
   $filter->config->modifyTagWhiteList($iframeRule);
   $filter->loadHTML($html);
   $filter->clean();
   return $filter->outputHtml();
}

以上这段代码表示在默认白名单列表后追加配置,允许iframe标签的使用,只允许iframe的src、width、height、frameborder、allowfullscreen属性。

并对src的属性值进行过滤,使得当iframe的src属性值的URL的域属于以上域名列表中的其中之一时,才允许该值出现,否则令src属性值为空。

更多示例

你可以在这里使用GitHub帐号登录 https://www.94cb.com/t/5280 ,并这个帖子下面回帖对这个库进行测试。

  • 前端 css3,filter实现不但可以实现网页灰色效果,还可以辅助实现黑夜模式效果。我们来看看实现方式吧! filter属性介绍 filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | s

  • FFmpeg FFmpeg 基本用法 本课要解决的问题 1.FFmpeg的转码流程是什么? 2.常见的视频格式包含哪些内容吗? 3.如何把这些内容从视频文件中抽取出来? 4.如何从一种格式转换为另一种格式? 5.如何放大和缩小视频? 6.如何旋转,翻转,填充,裁剪,模糊,锐化视频? 7.如何给视频加logo,删除logo? 8.如何给视频加文本,动态文本? 9.如何处理图片? 10.如何录像,添加

  • 在springMVC中,可以通过配置来过滤静态资源, 也可以在web.xml中进行配置,通过自定义Filter来实现。 web.xml配置如下。 <filter> <filter-name>securityFilter</filter-name> <filter-class>com.wswhr.SecurityFilter</filter-class> <init-param>

  • 出于某种原因,我创建的表单在每种输入类型之间都有很大的空间。我试着做的形式{padding:0px; margin:0px; border:none; }但没有奏效。如果有人能帮忙,我不确定如何解决这个问题。我添加了一个JSFiddle来向大家展示我正在谈论的内容。感谢您提前的帮助。html表单输入项之间的间距 HTML代码: Our Really Cool Banking App Home Ch

  • 目录 一、HTML+CSS 1. 如何理解HTML的语义化 2. 从浏览器地址栏输入url回车会发生什么 3. 溢出的文字显示省略号 4. css选择器和优先级  css选择器  5. BFC 6. 水平垂直居中的方法  二、JavaScript 1. 基本数据类型 2. 数组的使用  一、数组序列化  二、栈和队列方法 三、排列方法  四、操作方法  五、位置方法  六、迭代方法  2.1 利用

  • 码字不易,转载请务必注明原文出处。 不断学习,后期的新增笔记会继续加到文章上方 点击链接后退页面: <a href="javascript:history.go(-1)">回到上一个网页</a> ——修改placeholder提示的样式: 1.除IE外通用写法 类名或标签名::placeholder {color: red;} 2.加兼容前缀写法 css超出一行显示省略号: 给定宽度(wid

 相关资料
  • 本文向大家介绍PHP过滤黑名单关键字的方法,包括了PHP过滤黑名单关键字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP过滤黑名单关键字的方法。分享给大家供大家参考。具体实现方法如下: 关键字过滤非常的简单把要过滤的内容存在数组或文档中,然后用户提交时我们进行preg_match或istrpos判断即可解决了,具体方法如下. 实例代码如下: 关键字的存放形式为txt,txt文件

  • 本文向大家介绍php实现ip白名单黑名单功能,包括了php实现ip白名单黑名单功能的使用技巧和注意事项,需要的朋友参考一下 这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等. 获取ip地址,这里引用thinkphp内置函数 以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。

  • 主要内容:什么是 PHP 过滤器?,为什么使用过滤器?,函数和过滤器,实例,Validating 和 Sanitizing,选项和标志,实例,验证输入,实例,实例解释,净化输入,实例解释,过滤多个输入,实例,实例解释,使用 Filter Callback,实例,实例解释PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。 什么是 PHP 过滤器? PHP 过滤器用于验证和过滤来自非安全来源的数据。 测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。 PHP

  • 问题内容: 这是用于.NET。设置了IgnoreCase,未设置MultiLine。 通常我在正则表达式方面很体面,也许我的咖啡因含量低… 允许用户输入HTML编码的实体(<lt;,<amp;等),并使用以下HTML标签: 允许自动关闭 和,带有或不带有额外的空间,但不是必需的。 我想要: 除去上面列出的那些标记之外的所有开始和结束HTML标记。 从其余标签中删除属性, 但 锚点可以具有href。

  • 本文向大家介绍基于SAP HANA中的时间过滤器导出交货单位,包括了基于SAP HANA中的时间过滤器导出交货单位的使用技巧和注意事项,需要的朋友参考一下 导出交付单位时,可以通过“按时间筛选”限制导出,这意味着在上述时间间隔内更新的信息视图将仅导出。 从下拉列表中选择投放单位后,您必须选中复选框,然后输入时间间隔-从和到日期。 在下面的快照中,您可以看到我们突出显示了“按时间过滤”选项,用户可以

  • 我想选择仅在顶级国家/地区之后或仅在其他国家/地区之后的span元素 我已经尝试了 如果我分别尝试这两种XPATH,它们都可以工作,但如果结合使用,它们就不起作用。 我只想选择排名靠前的国家,并将其列入一个列表:,然后过滤掉其他国家。 如果我使用[text()=“Top Countries”]//以下同胞::span所有国家都被选中。例如,<代码>[“澳大利亚”、“几内亚比绍”、“西班牙”、“瑞士

  • 目前为止我们描述的都是基于用户的协同过滤算法。我们将一个用户和其他所有用户进行对比,找到相似的人。这种算法有两个弊端: 扩展性 上文已经提到,随着用户数量的增加,其计算量也会增加。这种算法在只有几千个用户的情况下能够工作得很好,但达到一百万个用户时就会出现瓶颈。 稀疏性 大多数推荐系统中,物品的数量要远大于用户的数量,因此用户仅仅对一小部分物品进行了评价,这就造成了数据的稀疏性。比如亚马逊有上百万

  • 如果我有一个清单,比如说 我如何才能获得一个名字不同的年龄最大的学生名单?在C#中,使用system.linq GroupBy然后比较,然后用select进行扁平化,这将非常简单,我不太确定如何在Java中实现同样的功能。