SVG Sanitizer compared with DOMPurify and Scour| SVG Sanitizer | DOMPurify | Scour |
|---|
| Technical basis: The page is a playground for the PHP library svg-sanitize by the GitHub user darylldoyle (the library that powers the Safe SVG WordPress plugin). You paste an SVG and the library filters tags and attributes against a whitelist. The library states that its code is largely borrowed from DOMPurify. | Technical basis: It is a DOM-only XSS sanitizer for HTML, MathML and SVG. It parses the input into a DOM and filters elements and attributes against allow lists. It is the reference design that the PHP library follows. | Technical basis: It is not a security filter. It rewrites SVG to reduce size by removing metadata, comments and redundant data, so a malicious SVG can pass through it unless it is cleaned by another tool. |
| Inputs and outputs: You paste SVG markup or load a built-in sample, choose a library version (50 versions are listed) and options, then read a diff, the cleaned output, a preview and a list of issues. The version selector helps to check whether an older release let a given file through. | Inputs and outputs: It takes an HTML or SVG string, or a DOM node, and returns a clean string or DOM. Output options include whole document, DOM fragment and Trusted Types. Configuration covers allowed tags, forbidden attributes, URI patterns and hooks. | Inputs and outputs: It reads an SVG file and writes an optimized SVG, or a compressed .svgz when the output file has that extension. Options control ID shortening, comment removal and indentation. |
| Licence and openness: The playground links to the library repository and issue tracker. The library is released under GPL-2.0, which matters if you plan to embed it in a non-GPL product. | Licence and openness: Dual-licensed under Apache-2.0 and MPL-2.0, so it can be embedded in most commercial code bases. | Licence and openness: Open source under Apache License 2.0. |
| Platform and integration: Browser page for manual checks. For automation, the underlying library installs with Composer as enshrined/svg-sanitize and runs on the server in PHP. It also has a command line scanner script that returns errors as JSON. | Platform and integration: JavaScript library for browsers, and for Node.js together with a DOM implementation such as jsdom. The maintainers do not recommend happy-dom as safe. | Platform and integration: Python command line tool installed with pip. The latest release listed on PyPI is 0.38.2, dated November 2020. |
| Validity limits: The author describes the library as an attempt at a decent SVG sanitizer and states that more extensive testing is still needed. The playground invites users to report any SVG that gets through. Remote references are only removed if that option is switched on. | Validity limits: Only the latest release receives security support. Results depend on the DOM implementation in use and on the configuration chosen by the integrator. | Validity limits: Not designed to detect or block scripts, so it must not be the only protection when handling files from unknown sources. |
| When to choose it: Choose it to check an uploaded SVG by hand, or to test how the PHP library treats a suspicious file before relying on it in a PHP or WordPress project. | When to choose it: Choose it when untrusted markup is handled in a JavaScript application, in the browser or on a Node.js server. | When to choose it: Choose it to shrink trusted SVG files in a build step, after the content has been vetted with a sanitizer. |