lab1521 / neaty-html
使用 Tidy 清理 HTML 标记
v1.0.9
2016-08-15 12:07 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: 5.4.*
README
清理 HTML。适用于编写接受 HTML 标记的内容或博客。需要 PHP tidy 类。请先安装此扩展。
在您的网站上接受包含(包括标记/标签等)的 HTML 内容,在某种程度上是关于您网站及其用户安全性的一个担忧。令人恐惧的 XSS 或跨站脚本攻击始终是一种威胁。然而,凭借开源的力量,我们可以跟上常见威胁并减轻问题,以确保我们的网站或博客的安全。
安装
composer require lab1521/neaty-html
如何使用
<?php require('../vendor/autoload.php'); use Lab1521\NeatyHTML\NeatyHTML; //Goal: Remove onerror attribute which prevents eval to alert $badImage = '<img src=x:alert(window) onerror=eval(src) alt="bad image">'; $goodImage = '<img src="images/good.gif" alt="good image">'; $neaty = new NeatyHTML($badImage . $goodImage); //Outputs <img src="x:alert(window)" alt="bad image"><img src="images/good.gif" alt="good image"> echo $neaty->tidyUp(); //Goal: Remove unrecognized images and keep local sources only $neaty->blockedTags(['img']); $neaty->tagOverrides([ 'img' => [ [ 'attribute' => 'src', 'values' => ['images/'] //restricts to local folder ], ] ]); //Goal: Remove $badImage $neaty->loadHtml($badImage . $goodImage); //Outputs $goodImage only echo $neaty->tidyUp();
限制
当前 PHP 的 DomDocument 类不支持 HTML5 标签/属性。因此,会抛出 NeatyDOMException 异常。
Laravel 特定使用方法
服务提供者
对于您的 Laravel 应用,打开 config/app.php,然后在 providers 数组中追加
/* * Package Service Providers... */ Lab1521\NeatyHTML\NeatyHTMLServiceProvider::class,
使用 Facades
在相同的文件 config/app.php 中,'aliases' 数组中添加一个新项
'NeatyHTML' => Lab1521\NeatyHTML\Facades\NeatyHTML::class,
示例用法
<?php Route::get('/', function () { //Goal: Remove onerror attribute which prevents eval to alert $badImage = '<img src=x:alert(window) onerror=eval(src) alt="bad image">'; $goodImage = '<img src="images/good.gif" alt="good image">'; $neaty = NeatyHTML::loadHtml($badImage . $goodImage); //Goal: Remove unrecognized images and keep local sources only $neaty->blockedTags(['img']); $neaty->tagOverrides([ 'img' => [ [ 'attribute' => 'src', 'values' => ['images/'] //restricts to local folder ], ] ]); //Outputs $goodImage only return $neaty->tidyUp(); // return view('welcome'); });
自定义验证规则
NeatyHTML 提供了一个名为 'html' 的自定义验证规则,它将检查包含标记的 POST 输入,并在验证失败时传递错误消息。请注意,NeatyHTMLServiceProvider 默认是延迟加载的,因此我们需要在控制器方法中注入此类,以便使用自定义验证功能。这样我们只在需要时使用 NeatyHTML,这是很好的。
<?php use Lab1521\NeatyHTML\NeatyHTML; class PostController extends Controller { public function store(Request $request, NeatyHTML $neaty) { $this->validate($request, [ 'title' => 'required', 'body' => 'required|html' // <-- custom rule ]); // Your awesome code here ... $body = $neaty->tidyUp($request['body']); } }