From 59bbf504cf1c6205c56c9c0d6c9e3c6154904ecc Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Tue, 30 Jun 2026 18:35:34 +0100 Subject: [PATCH] Content filtering: Added srcset protocol filter Upstream libraries used did not specifically treat values in srcset as URIs like other attributes, so this adds a simple filter for possible bad values. Updated tests to cover. Thanks for Gurmandeep Deol for reporting. --- .../HtmlPurifier/ConfiguredHtmlPurifier.php | 4 +++ .../Filters/UriLimitFileProtocolToAnchors.php | 2 -- app/Util/HtmlPurifier/SrcsetAttrDef.php | 26 +++++++++++++++++++ tests/Entity/PageContentFilteringTest.php | 3 +++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 app/Util/HtmlPurifier/SrcsetAttrDef.php diff --git a/app/Util/HtmlPurifier/ConfiguredHtmlPurifier.php b/app/Util/HtmlPurifier/ConfiguredHtmlPurifier.php index 87ed5add2..173935903 100644 --- a/app/Util/HtmlPurifier/ConfiguredHtmlPurifier.php +++ b/app/Util/HtmlPurifier/ConfiguredHtmlPurifier.php @@ -156,6 +156,10 @@ class ConfiguredHtmlPurifier // Allow mention-ids on links $definition->addAttribute('a', 'data-mention-user-id', 'Number'); + + // Set up custom handler for srcset to limit accepted types + $definition->addAttribute('img', 'srcset', new SrcsetAttrDef()); + $definition->addAttribute('source', 'srcset', new SrcsetAttrDef()); } protected function configureUriDefinition(HTMLPurifier_URIDefinition $definition): void diff --git a/app/Util/HtmlPurifier/Filters/UriLimitFileProtocolToAnchors.php b/app/Util/HtmlPurifier/Filters/UriLimitFileProtocolToAnchors.php index 19ca9cc82..bf259e083 100644 --- a/app/Util/HtmlPurifier/Filters/UriLimitFileProtocolToAnchors.php +++ b/app/Util/HtmlPurifier/Filters/UriLimitFileProtocolToAnchors.php @@ -51,5 +51,3 @@ class UriLimitFileProtocolToAnchors extends HTMLPurifier_URIFilter return false; } } - -// vim: et sw=4 sts=4 diff --git a/app/Util/HtmlPurifier/SrcsetAttrDef.php b/app/Util/HtmlPurifier/SrcsetAttrDef.php new file mode 100644 index 000000000..3b8417a55 --- /dev/null +++ b/app/Util/HtmlPurifier/SrcsetAttrDef.php @@ -0,0 +1,26 @@ +' => '', '
My local image
' => '
', '
My local image
' => '
', + '
My local image
' => '
My local image
', + '
cat
' => '
cat
', + '' => '', ]; config()->set('app.content_filtering', 'a');