هذه هي محاولتي لبناء 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 ولكنه سيضيف حملًا إضافيًا إلى المطهر.
يتم ضبط هذا الإعداد الافتراضي على خطأ، ويتم ضبطه على صحيح لإزالة المراجع.
$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/
تفضل مايكل بوتر بإنشاء وحدة دروبال لهذه المكتبة المتوفرة على: https://www.drupal.org/project/svg_sanitizer
يتم استخدام مكتبة svg sanitizer هذه بشكل افتراضي في قلب TYPO3 v9 والإصدارات الأحدث. راجع إدخال سجل التغيير المقابل لمزيد من التفاصيل.
يمكنك تشغيل هذه عن طريق تشغيل vendor/bin/phpunit
من الدليل الأساسي لهذه الحزمة.
بفضل العمل الذي قام به Gudmdharalds، يوجد الآن ماسح ضوئي مستقل يمكن استخدامه عبر CLI.
سيتم إخراج أي أخطاء بتنسيق JSON. انظر العلاقات العامة على سبيل المثال.
استخدمه على النحو التالي: php svg-scanner.php ~/svgs/myfile.svg
سيكون من الرائع إجراء المزيد من الاختبارات الشاملة لملفات SVG/XML، وسأحاول إضافتها قريبًا. إذا كنت ترغب في القيام بذلك من أجلي، فيرجى القيام بذلك وإجراء علاقات عامة!