快速轻松地安全化HTML文本。

v1.0.0 2021-04-13 23:48 UTC

This package is auto-updated.

Last update: 2024-09-15 01:31:13 UTC


README

 Clay Banks - Unslash (UL) #kBaf0DwBPbE

Latest Stable Version License Coverage Status Laravel Octane Compatible

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清理除最基本的标签之外的所有内容:abbrblockquotedivdelemfigcaptionfigureh1h2h3h4h5h6ipqsmallspanstrongsubsup

您可以通过启用每个包含的扩展创建自己的扩展来启用更多标签。

如果您需要从字符串中删除所有标签,请使用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许可证许可。