Dies ist mein Versuch, einen anständigen svg sanitizer in PHP zu erstellen. Die Arbeit ist größtenteils von DOMPurify entlehnt.
Entweder enshrined/svg-sanitize
über Composer anfordern oder das Repo herunterladen und auf die alte Art und Weise einbinden!
Die Verwendung ist ziemlich einfach. Erstellen Sie eine neue Instanz von enshrinedsvgSanitizeSanitizer
und rufen Sie dann sanitize
auf, während Sie Ihr schmutziges SVG/XML übergeben
Grundlegendes Beispiel
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
Dies gibt entweder eine bereinigte SVG/XML-Zeichenfolge oder den booleschen Wert „ false
zurück, wenn die XML-Analyse fehlschlägt (normalerweise aufgrund einer schlecht formatierten Datei).
Sie können Ihre eigene Whitelist mit Tags und Attributen übergeben, indem Sie die Methoden Sanitizer::setAllowedTags
bzw. Sanitizer::setAllowedAttrs
verwenden.
Für diese Methoden ist es erforderlich, dass Sie enshrinedsvgSanitizedataTagInterface
oder enshrinedsvgSanitizedataAttributeInterface
implementieren.
Sie haben die Möglichkeit, Attribute zu entfernen, die auf Remote-Dateien verweisen. Dies stoppt HTTP-Lecks, erhöht jedoch den Aufwand für die Bereinigung.
Der Standardwert ist „false“ und wird auf „true“ gesetzt, um Verweise zu entfernen.
$sanitizer->removeRemoteReferences(true);
Sie können die Methode getXmlIssues()
verwenden, um eine Reihe von Problemen zurückzugeben, die während der Bereinigung aufgetreten sind.
Dies kann nützlich sein, um zu protokollieren oder dem Benutzer Feedback darüber zu geben, warum ein SVG abgelehnt wurde.
$issues = $sanitizer->getXmlIssues();
Sie können die XML-Ausgabe minimieren, indem Sie $sanitizer->minify(true);
.
Eine Demo ist verfügbar unter: http://svg.enshrined.co.uk/
Ich habe gerade ein WordPress-Plugin veröffentlicht, das diesen Code enthält, damit Sie Ihre WordPress-Uploads bereinigen können. Es ist im WordPress-Plugin-Verzeichnis verfügbar: https://wordpress.org/plugins/safe-svg/
Michael Potter hat freundlicherweise ein Drupal-Modul für diese Bibliothek erstellt, das unter https://www.drupal.org/project/svg_sanitizer verfügbar ist
Diese svg sanitizer -Bibliothek wird standardmäßig im Kern von TYPO3 v9 und späteren Versionen verwendet. Weitere Details finden Sie im entsprechenden Changelog-Eintrag.
Sie können diese ausführen, indem Sie vendor/bin/phpunit
aus dem Basisverzeichnis dieses Pakets ausführen.
Dank der Arbeit von gudmdharalds gibt es jetzt einen eigenständigen Scanner, der über die CLI verwendet werden kann.
Eventuelle Fehler werden im JSON-Format ausgegeben. Ein Beispiel finden Sie in der PR.
Verwenden Sie es wie folgt: php svg-scanner.php ~/svgs/myfile.svg
Umfangreichere Tests für die SVGs/XML wären schön, ich werde versuchen, diese bald hinzuzufügen. Wenn Sie Lust haben, es für mich zu tun, tun Sie es bitte und machen Sie eine PR!