t3g/svg-sanitize-elts7

此包已被弃用且不再维护。未建议替代包。

PHP的SVG清理器

0.15.4.1 2022-02-23 09:02 UTC

README

⚠️ 这是一个仅适用于TYPO3 CMS 7.6 ELTS的临时包,提供与PHP 5.5兼容的更改!一旦对TYPO3 CMS 7.6 ETLS的支持被取消,此包也将被弃用。在任何其他范围内使用此包均不受支持,也不会被支持。

安装

可以通过composer要求t3g/svg-sanitize-elts7,或者下载仓库并使用旧方法包含它!

用法

使用起来相当简单。创建一个enshrined\svgSanitize\Sanitizer的新实例,然后传递污秽的SVG/XML调用sanitize

基本示例

use enshrined\svgSanitize\Sanitizer;

// Create a new sanitizer instance
$sanitizer = new Sanitizer();

// Load the dirty svg
$dirtySVG = file_get_contents('filthy.svg');

// Pass it to the sanitizer and get it back clean
$cleanSVG = $sanitizer->sanitize($dirtySVG);

// Now do what you want with your clean SVG/XML data

输出

这将返回一个清理过的SVG/XML字符串,或者在XML解析失败时返回布尔值false(通常是由于文件格式不正确)。

选项

您可以通过使用Sanitizer::setAllowedTagsSanitizer::setAllowedAttrs方法分别传递您自己的白名单标签和属性。

这些方法要求您实现enshrined\svgSanitize\data\TagInterfaceenshrined\svgSanitize\data\AttributeInterface

移除远程引用

您可以选择移除引用远程文件的属性,这将阻止HTTP泄露,但会增加清理器的开销。

默认为false,设置为true以移除引用。

$sanitizer->removeRemoteReferences(true);

查看清理问题

您可以使用getXmlIssues()方法返回在清理过程中发生的问题数组。

这可能对记录或向用户解释为什么SVG被拒绝很有用。

$issues = $sanitizer->getXmlIssues();

压缩

您可以通过调用$sanitizer->minify(true);来压缩XML输出。

演示

可在以下位置找到演示: http://svg.enshrined.co.uk/

WordPress

我刚刚发布了一个包含此代码的WordPress插件,您可以从中清理WordPress上传。它可在WordPress插件目录中找到:https://wordpress.org/plugins/safe-svg/

Drupal

Michael Potter已慷慨地为此库创建了一个Drupal模块,可在以下位置找到:https://www.drupal.org/project/svg_sanitizer

TYPO3

本库的TYPO3 CMS集成作为一个composer包t3g/svg-sanitizer可用,位于https://github.com/TYPO3GmbH/svg_sanitizer

测试

您可以通过从本包的基本目录运行vendor/bin/phpunit来运行这些测试。

通过CLI独立扫描文件

多亏了gudmdharalds的工作,现在有一个独立的扫描器可以通过CLI使用。

任何错误将以JSON格式输出。请参阅该PR以获取示例。

使用方法如下:php svg-scanner.php ~/svgs/myfile.svg

待办事项

对SVG/XML进行更广泛的测试将非常令人愉快,我将尝试尽快添加这些测试。如果您想为我完成这项工作,请做并提交一个PR!