darkghosthunter / larasane
快速轻松地安全化HTML文本。
Requires
- php: ^7.4||^8.0
- ext-mbstring: *
- illuminate/support: 7.*||8.*
- tgalopin/html-sanitizer: ^1.4.0
Requires (Dev)
- orchestra/testbench: ^5.18||^v6.17.0
- phpunit/phpunit: ^9.5.4
This package is auto-updated.
Last update: 2024-09-15 01:31:13 UTC
README
Larasane
使用流畅的方法快速将文本清理为安全的HTML。
要求
- PHP 7.4, 8.0 或更高版本。
- Laravel 7.x, 8.x 或更高版本。
安装
只需运行Composer
composer require darkghosthunter/larasane
就是这样。
用法
在收到要清理的HTML输入后,使用Sanitizer
外观来完成。
<?php use DarkGhostHunter\Larasane\Facades\Sanitizer; $input = 'Trust <script src="https://malicio.us/code.js"></script> me!'; echo Sanitizer::input($input)->sanitize($input); // "Trust me!"
清理器提供了一系列流畅的方法,可以链接以允许或禁止标签、属性和链接。
默认情况下,Larasane清理除最基本的标签之外的所有内容:a
、b
、br
、blockquote
、div
、del
、em
、figcaption
、figure
、h1
、h2
、h3
、h4
、h5
、h6
、i
、p
、q
、small
、span
、strong
、sub
、sup
。
您可以通过启用每个包含的扩展或创建自己的扩展来启用更多标签。
如果您需要从字符串中删除所有标签,请使用
strip_tags()
代替。
配置
Larasane默认情况下会清理除基本标签之外的所有标签,但您可以通过发布配置文件来配置默认设置。
php artisan vendor:publish --provider="DarkGhostHunter\Larasane\LarasaneServiceProvider" --tag="config"
您将收到包含以下内容的config/larasane.php
文件。
<?php return [ 'max_length' => 1000, 'allow_code' => [ 'basic', ], 'security' => [ 'enforced_domains' => null, 'enforce_https' => null, 'image_data' => false, 'allow_mailto' => false, ], 'tags' => [ 'div' => 'class', 'img' => ['src', 'alt', 'title', 'class'], 'a' => ['class', 'target'], 'ul' => 'class', 'ol' => 'class', 'li' => 'class', ] ];
最大长度
return [ 'max_length' => 1000, ];
要清理的输入将被截断到最大长度。您可以从全局或从清理操作中更改此设置。
$sanitized = Sanitizer::for($input)->maxLength(200);
允许的代码
return [ 'allow_code' => [ 'basic', /* 'list', 'table', 'image', 'code', 'iframe', 'details', 'extra' */ ], ];
允许在HTML输入中使用的类型标签。这些按扩展名称分组,默认情况下仅允许基本HTML标签。您可以根据清理操作覆盖列表。
$sanitized = Sanitizer::for($input)->allowCode('basic', 'list', 'table');
如果您需要接受自定义标签,您应该创建一个扩展来处理它们。
安全
return [ 'security' => [ 'enforce_hosts' => null, 'enforce_https' => null, 'image_data' => false, 'allow_mailto' => false, ], ];
这组了一些处理<a>、<img>和<iframe>标签中的链接的安全功能。这些都可以在运行时覆盖。
$input = Sanitizer::for($input) ->hosts('myapp.com') ->enforceHttps(true) ->imageData(true) ->allowMailto(true);
enforce_hosts
您可以在此处设置允许链接的主机列表,例如 myapp.com
。
如果为 null
,则不会强制执行链接保护,因此将允许链接指向任何地方。如果列表为空,则标签上的链接将出现为空。
enforce_https
强制执行HTTPS链接,将每个链接转换为 https
方案。这通常在 <iframe>
上需要。
如果为 null
,则仅在生产环境中启用。
image_data
允许 <img>
在源标签中包含图像数据。对于小型图标或图像,这有时是所需的,因为图像将被 嵌入 到HTML代码中而不是链接到其他地方。
<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOu..." />
allow_mailto
允许 <a>
标签具有邮件链接。这简单地允许或禁止它们。
标签
return [ 'tags' => [ 'div' => 'class', 'img' => ['src', 'alt', 'title', 'class'], 'a' => ['class', 'target'], 'ul' => 'class', 'ol' => 'class', 'li' => 'class', ] ];
这是一个数组,包含每个清理标签允许的属性。这可能在允许样式或在前端禁止有问题属性时很有用。这可以在运行时覆盖。
$sanitized = Sanitizer::for($input)->tagAttributes('a', 'class', 'target');
添加清理扩展
您可以根据需要创建自己的标签解析扩展,除了包含的功能之外,比如解析自定义标签。一旦您创建自定义扩展,您可以使用extend()
方法将其添加到您的AppServiceProvider
或类似的服务提供者中的Sanitizer构建器中。
use HtmlSanitizer\SanitizerBuilder; use App\Sanitizer\MyExtension; /** * Register the application services. * * @return void */ public function register() { $this->app->extend(SanitizerBuilder::class, function (SanitizerBuilder $builder) { return $builder->registerExtension(new MyExtension()); }); }
许可证
本软件包由MIT许可证许可。