The Sanitizer helper
Overview
The Shopware 6 Sanitizer Helper is a wrapper around DOMPurify
, which is used to sanitize HTML in order to prevent XSS attacks
.
Where is it registered?
The Sanitizer Helper is registered to the Shopware Global Object and therefore can be accessed anywhere in your plugin.
const sanitizer = Shopware.Helper.SanitizerHelper;
It also is registered in the Vue prototype as seen here. This means it can also be accessed in your components like this:
const Sanitizer = this.$sanitizer;
const sanitize = this.$sanitize;
Sanitizing HTML
As mentioned before the SanitizerHelper
is registered to the Shopware Global Object and therefore can be accessed like this everywhere:
Shopware.Helper.SanitizerHelper.sanitize('<img src=x onerror=alert(1)//>'); // becomes <img src="x">
And since it is bound to the Vue prototype it can be used in all Vue components like this:
this.$sanitizer.sanitize('<svg><g/onload=alert(2)//<p>'); // becomes <svg><g></g></svg>
this.$sanitize('<img src=x onerror=alert(1)//>'); // becomes <img src="x">
How to set the config
The config can be set with the setConfig
and cleared with the clearConfig
function, as seen below:
Shopware.Helper.SanitizerHelper.setConfig({
USE_PROFILES: { html: true }
});
Shopware.Helper.SanitizerHelper.clearConfig()
See all of the configuration options here
How to add hooks
The aforementioned Wrapper also provides functions to add and remove hooks to DOMPurify. Learn what DOMPurify hooks are in their documentation.
Shopware.Helper.SanitizerHelper.addMiddleware('beforeSanitizeElements', function (
currentNode,
hookEvent,
config
) {
// Do something with the current node and return it
// You can also mutate hookEvent (i.e. set hookEvent.forceKeepAttr = true)
return currentNode;
}
);
Shopware.Helper.SanitizerHelper.removeMiddleware('beforeSanitizeElements');