tgalopin/html-sanitizer-bundle

此包已被废弃,不再维护。作者建议使用symfony/html-sanitizer包代替。

Symfony Bundle for https://github.com/tgalopin/html-sanitizer

安装次数: 805 277

依赖项: 4

建议者: 0

安全: 0

星标: 83

关注者: 3

分支: 9

开放问题: 3

类型:symfony-bundle

1.4.0 2021-11-25 21:37 UTC

This package is auto-updated.

Last update: 2022-06-24 11:57:44 UTC


README

Packagist Version Software license

html-sanitizer是一个库,旨在处理、清理和净化外部用户(您无法信任的用户)发送的HTML,允许您安全地存储和显示它。它提供了明智的默认设置,以提供极佳的开发者体验,同时仍然可以完全配置。

此存储库是一个Symfony包,将html-sanitizer库集成到Symfony应用程序中。它提供了在Symfony中轻松使用净化器的工具。

安装

html-sanitizer-bundle需要PHP 7.1+和Symfony 3.4+。

您可以使用Symfony Flex安装此包

composer require tgalopin/html-sanitizer-bundle

配置

您可以使用html_sanitizer配置部分配置此包

# config/packages/html_sanitizer.yaml

html_sanitizer:
    default_sanitizer: 'default'
    sanitizers:
        default:
            extensions: ['basic', 'image', 'list']
            tags:
                img:
                    allowed_hosts: ['127.0.0.1', 'mywebsite.com', 'youtube.com']
                    force_https: true
        admin_content:
            extensions: ['basic', 'image', 'list']

如您所见,您可以在应用程序中同时拥有多个可用的净化器。请参阅库文档以了解净化器的所有可用配置选项。

在服务中使用

此包提供配置的净化器,使用HtmlSanitizer\SanitizerInterface接口进行自动装配。此自动装配将针对在包配置中定义的默认净化器。

这意味着如果您使用自动装配,您可以在任何服务中将SanitizerInterface类型提示为以获取默认净化器

use HtmlSanitizer\SanitizerInterface;

class MyService
{
    private $sanitizer;
    
    public function __construct(SanitizerInterface $sanitizer)
    {
        $this->sanitizer = $sanitizer;
    }
    
    // ...
}

同样适用于控制器

use HtmlSanitizer\SanitizerInterface;

class MyController
{
    public function index(SanitizerInterface $sanitizer)
    {
        // ...
    }
}

如果您不使用自动装配,您可以手动将html_sanitizer服务注入到您的服务中,以获取默认净化器。

如果您需要访问服务中的默认净化器以外的其他净化器,您可以

  1. 通过将配置作为html_sanitizer.<santizer-name>(例如,html_sanitizer.admin_content)注入您的服务配置来注入特定的净化器;

  2. 使用净化器注册表,通过将配置作为html_sanitizer.registry注入您的服务配置。它是一个服务定位器,映射所有可用的净化器

use Psr\Container\ContainerInterface;

class MyService
{
    public function __construct(ContainerInterface $sanitizers)
    {
        // $sanitizers->get('admin_content') ...
    }
}

在表单中使用

此仅适用于您已安装Symfony Form组件的情况。

html-sanitizer的主要用途是与表单结合使用。此包提供了一个TextType扩展,允许您自动净化任何文本字段或基于TextType(TextareaType、SearchType等)的字段的HTML。

要在任何表单中使用它,您可以使用 sanitize_html 选项

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('content', TextareaType::class, ['sanitize_html' => true])
        ;
    }
}

要使用除默认之外的清理器,请使用 sanitizer 选项

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('content', TextareaType::class, ['sanitize_html' => true, 'sanitizer' => 'admin_content'])
        ;
    }
}

在 Twig 中的使用

这仅适用于您已安装 Twig 扩展包的情况。

通过扩展提供了 sanitize_html Twig 过滤器,让您可以在视图中过滤 HTML。

<div>
    {{ html|sanitize_html }}
</div>

要使用除默认之外的清理器,请向过滤器添加一个参数

<div>
    {{ html|sanitize_html('admin_content') }}
</div>

注册扩展

如果您使用自动配置,实现 HtmlSanitizer\Extension\ExtensionInterface 接口的类将被自动注册,您可以在清理器配置中使用它们

html_sanitizer:
    default_sanitizer: 'default'
    sanitizers:
        default:
            extensions: ['basic', 'my-extension']

如果您不使用自动配置,您需要将您的扩展作为标记为 html_sanitizer.extension 的服务进行注册

services:
    app.sanitizer.my_extension:
        class: 'App\Sanitizer\MyExtension'
        tags: [{ name: 'html_sanitizer.extension' }]

安全问题

如果您在清理器包或库中发现安全漏洞,请遵循 我们的披露流程

向后兼容承诺

此库遵循与 Symfony 框架相同的向后兼容承诺:https://symfony.ac.cn/doc/current/contributing/code/bc.html

注意:此库中的许多类要么标记为 @final,要么标记为 @internal@internal 类被排除在任何向后兼容承诺之外(您不应在代码中使用它们),而 @final 类可以使用,但不应扩展(请使用组合代替)。