From fa06f0f94f864b5d69d9065c41547320af3eae3c Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Wed, 8 Dec 2021 14:28:30 +0800 Subject: [PATCH 1/2] Add SVG sanitization and extraction --- composer.json | 3 +- src/Foundation/Bootstrap/RegisterWinter.php | 3 + src/Support/Facades/Svg.php | 21 +++++++ src/Support/Svg.php | 60 +++++++++++++++++++ tests/Support/SvgTest.php | 22 +++++++ tests/fixtures/svg/extracted/winter-dirty.svg | 1 + tests/fixtures/svg/extracted/winter.svg | 1 + tests/fixtures/svg/winter-dirty.svg | 59 ++++++++++++++++++ tests/fixtures/svg/winter.svg | 56 +++++++++++++++++ 9 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 src/Support/Facades/Svg.php create mode 100644 src/Support/Svg.php create mode 100644 tests/Support/SvgTest.php create mode 100644 tests/fixtures/svg/extracted/winter-dirty.svg create mode 100644 tests/fixtures/svg/extracted/winter.svg create mode 100644 tests/fixtures/svg/winter-dirty.svg create mode 100644 tests/fixtures/svg/winter.svg diff --git a/composer.json b/composer.json index 9c81953a1..0a254b33f 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,8 @@ "league/csv": "~9.1", "nesbot/carbon": "^2.0", "laravel/framework": "~6.0", - "laravel/tinker": "~2.0" + "laravel/tinker": "~2.0", + "enshrined/svg-sanitize": "^0.14.1" }, "require-dev": { "phpunit/phpunit": "^8.5.12|^9.3.3", diff --git a/src/Foundation/Bootstrap/RegisterWinter.php b/src/Foundation/Bootstrap/RegisterWinter.php index da6719cc3..c10d16690 100644 --- a/src/Foundation/Bootstrap/RegisterWinter.php +++ b/src/Foundation/Bootstrap/RegisterWinter.php @@ -25,6 +25,9 @@ public function bootstrap(Application $app) $app->singleton('string', function () { return new \Winter\Storm\Support\Str; }); + $app->singleton('svg', function () { + return new \Winter\Storm\Support\Svg; + }); /* * Change paths based on config diff --git a/src/Support/Facades/Svg.php b/src/Support/Facades/Svg.php new file mode 100644 index 000000000..c6e97a49e --- /dev/null +++ b/src/Support/Facades/Svg.php @@ -0,0 +1,21 @@ +removeRemoteReferences(true); + $sanitizer->removeXMLTag(true); + + if ($minify) { + $sanitizer->minify(true); + } + + return trim($sanitizer->sanitize($svg)); + } +} diff --git a/tests/Support/SvgTest.php b/tests/Support/SvgTest.php new file mode 100644 index 000000000..7bc723271 --- /dev/null +++ b/tests/Support/SvgTest.php @@ -0,0 +1,22 @@ +assertEquals($fixture, $svg); + } + + public function testDirtySvg() + { + $svg = Svg::extract(dirname(__DIR__) . '/fixtures/svg/winter-dirty.svg'); + $fixture = trim(file_get_contents(dirname(__DIR__) . '/fixtures/svg/extracted/winter-dirty.svg')); + + $this->assertEquals($fixture, $svg); + } +} diff --git a/tests/fixtures/svg/extracted/winter-dirty.svg b/tests/fixtures/svg/extracted/winter-dirty.svg new file mode 100644 index 000000000..31a09caba --- /dev/null +++ b/tests/fixtures/svg/extracted/winter-dirty.svg @@ -0,0 +1 @@ + link diff --git a/tests/fixtures/svg/extracted/winter.svg b/tests/fixtures/svg/extracted/winter.svg new file mode 100644 index 000000000..6386f7eb1 --- /dev/null +++ b/tests/fixtures/svg/extracted/winter.svg @@ -0,0 +1 @@ + diff --git a/tests/fixtures/svg/winter-dirty.svg b/tests/fixtures/svg/winter-dirty.svg new file mode 100644 index 000000000..55656a44c --- /dev/null +++ b/tests/fixtures/svg/winter-dirty.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shouldn't be here + + + + + + link + + + diff --git a/tests/fixtures/svg/winter.svg b/tests/fixtures/svg/winter.svg new file mode 100644 index 000000000..6c7ddced0 --- /dev/null +++ b/tests/fixtures/svg/winter.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a15bf525671478cf5cb9a5f63bcdb5f6fb181238 Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Thu, 25 Aug 2022 12:50:37 +0800 Subject: [PATCH 2/2] Relax version constraint for SVG Sanitizer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 152da871a..6d7597aa2 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ "assetic/framework": "~3.0", "doctrine/dbal": "^2.6", - "enshrined/svg-sanitize": "^0.14.1", + "enshrined/svg-sanitize": "^0.15", "erusev/parsedown-extra": "~0.7", "laravel/framework": "^9.1", "laravel/tinker": "^2.7",