enshrined / svg-sanitize
PHP SVG 清洗器
Requires
- php: ^7.1 || ^8.0
- ext-dom: *
- ext-libxml: *
Requires (Dev)
- phpunit/phpunit: ^6.5 || ^8.5
- dev-master
- 0.20.0
- 0.19.0
- 0.18.0
- 0.17.0
- 0.16.0
- 0.15.4
- 0.15.3
- 0.15.2
- 0.15.1
- 0.15.0
- 0.14.1
- 0.14.0
- 0.13.3
- 0.13.2
- 0.13.1
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.3.1
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.1
- 0.2.0
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-fix/case-sensitive-attrs
- dev-feature/update-codeclimate-id
- dev-feature/fix-tests
- dev-develop
- dev-fix/31-xss
This package is auto-updated.
Last update: 2024-09-05 10:19:32 UTC
README
这是我尝试在PHP中构建一个不错的SVG清洗器的努力。这项工作大部分借鉴自 DOMPurify。
安装
通过composer要求 enshrined/svg-sanitize
或下载仓库并按旧方式包含!
用法
使用这个库相当简单。创建一个新的 enshrined\svgSanitize\Sanitizer
实例,然后调用 sanitize
方法并传入你的脏 SVG/XML。
基本示例
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::setAllowedTags
和 Sanitizer::setAllowedAttrs
方法分别传递自己的标签和属性白名单。
这些方法要求您实现 enshrined\svgSanitize\data\TagInterface
或 enshrined\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
此 SVG 清洗器库是TYPO3 v9及以后版本核心默认使用的。有关详细信息,请参阅 相应的变更日志条目。
测试
您可以从此包的基本目录中运行 vendor/bin/phpunit
来运行这些测试。
通过CLI独立扫描文件
感谢 gudmdharalds 的努力,现在有一个可以用于CLI的独立扫描器。
任何错误将以JSON格式输出。请参阅 PR示例。
使用方法如下: php svg-scanner.php ~/svgs/myfile.svg
待办事项
对于SVGs/XML进行更广泛的测试将很棒,我会尽快添加这些。如果你愿意帮我做这件事,请动手做,并创建一个Pull Request!