Это моя попытка создать достойное svg sanitizer на PHP. Работа во многом заимствована у DOMPurify.
Либо требуйте enshrined/svg-sanitize
через композитор, либо загрузите репозиторий и включите его старым способом!
Использовать это довольно легко. Создайте новый экземпляр enshrinedsvgSanitizeSanitizer
, а затем вызовите 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, либо логическое значение false
, если синтаксический анализ XML не удался (обычно из-за плохо отформатированного файла).
Вы можете передать свой собственный белый список тегов и атрибутов, используя методы Sanitizer::setAllowedTags
и Sanitizer::setAllowedAttrs
соответственно.
Эти методы требуют реализации enshrinedsvgSanitizedataTagInterface
или enshrinedsvgSanitizedataAttributeInterface
.
У вас есть возможность удалить атрибуты, ссылающиеся на удаленные файлы. Это предотвратит утечки HTTP, но увеличит нагрузку на дезинфицирующее средство.
По умолчанию это значение false, для удаления ссылок установлено значение true.
$sanitizer->removeRemoteReferences(true);
Вы можете использовать метод getXmlIssues()
для возврата массива проблем, возникших во время очистки.
Это может быть полезно для регистрации или предоставления пользователю обратной связи о том, почему SVG было отклонено.
$issues = $sanitizer->getXmlIssues();
Вы можете минимизировать вывод XML, вызвав $sanitizer->minify(true);
.
Демо-версия доступна по адресу: http://svg.enshrined.co.uk/.
Я только что выпустил плагин WordPress, содержащий этот код, чтобы вы могли очищать свои загрузки WordPress. Он доступен в каталоге плагинов WordPress: https://wordpress.org/plugins/safe-svg/.
Майкл Поттер любезно создал модуль Drupal для этой библиотеки, который доступен по адресу: https://www.drupal.org/project/svg_sanitizer.
Эта библиотека svg sanitizer по умолчанию используется в ядре TYPO3 v9 и более поздних версиях. Дополнительную информацию см. в соответствующей записи журнала изменений.
Вы можете запустить их, запустивvendor vendor/bin/phpunit
из базового каталога этого пакета.
Благодаря работе gudmdharalds теперь существует автономный сканер, который можно использовать через CLI.
Любые ошибки будут выведены в формате JSON. См. пример PR.
Используйте его следующим образом: php svg-scanner.php ~/svgs/myfile.svg
Было бы здорово провести более обширное тестирование SVG/XML, я постараюсь добавить их в ближайшее время. Если вам хочется сделать это для меня, пожалуйста, сделайте пиар!