Ini adalah upaya saya untuk membangun svg sanitizer yang layak di PHP. Pekerjaan ini sebagian besar dipinjam dari DOMPurify.
Baik memerlukan enshrined/svg-sanitize
melalui composer atau unduh repo dan sertakan cara lama!
Menggunakan ini cukup mudah. Buat instance baru dari enshrinedsvgSanitizeSanitizer
lalu panggil sanitize
sambil meneruskan SVG/XML kotor Anda
Contoh Dasar
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
Ini akan mengembalikan string SVG/XML yang sudah dibersihkan atau boolean false
jika penguraian XML gagal (biasanya karena format file yang buruk).
Anda dapat meneruskan daftar putih tag dan atribut Anda sendiri dengan menggunakan metode Sanitizer::setAllowedTags
dan Sanitizer::setAllowedAttrs
.
Metode ini mengharuskan Anda menerapkan enshrinedsvgSanitizedataTagInterface
atau enshrinedsvgSanitizedataAttributeInterface
.
Anda memiliki opsi untuk menghapus atribut yang mereferensikan file jarak jauh, ini akan menghentikan kebocoran HTTP namun akan menambah overhead pada pembersih.
Defaultnya adalah false, disetel ke true untuk menghapus referensi.
$sanitizer->removeRemoteReferences(true);
Anda dapat menggunakan metode getXmlIssues()
untuk mengembalikan serangkaian masalah yang terjadi selama sanitasi.
Ini mungkin berguna untuk mencatat atau memberikan umpan balik kepada pengguna tentang alasan penolakan SVG.
$issues = $sanitizer->getXmlIssues();
Anda dapat memperkecil keluaran XML dengan memanggil $sanitizer->minify(true);
.
Ada demo yang tersedia di: http://svg.enshrined.co.uk/
Saya baru saja merilis plugin WordPress yang berisi kode ini sehingga Anda dapat membersihkan unggahan WordPress Anda. Ini tersedia dari direktori plugin WordPress: https://wordpress.org/plugins/safe-svg/
Michael Potter dengan baik hati telah membuat modul Drupal untuk perpustakaan ini yang tersedia di: https://www.drupal.org/project/svg_sanitizer
Pustaka svg sanitizer ini digunakan secara default di inti TYPO3 v9 dan versi yang lebih baru. Lihat entri changelog terkait untuk lebih jelasnya.
Anda dapat menjalankannya dengan menjalankan vendor/bin/phpunit
dari direktori dasar paket ini.
Berkat kerja gudmdharalds, kini ada pemindai mandiri yang dapat digunakan melalui CLI.
Kesalahan apa pun akan ditampilkan dalam format JSON. Lihat PR sebagai contoh.
Gunakan sebagai berikut: php svg-scanner.php ~/svgs/myfile.svg
Pengujian yang lebih ekstensif untuk SVG/XML akan menyenangkan, saya akan mencoba dan menambahkannya segera. Jika Anda ingin melakukannya untuk saya, silakan lakukan dan buatlah PR!