add global replacements using inverted char classes as a sanitizer for DOM based XSS

This commit is contained in:
Erik Krogh Kristensen
2021-04-27 10:33:19 +02:00
parent 310baab73f
commit e60628d463
2 changed files with 12 additions and 1 deletions

View File

@@ -34,7 +34,14 @@ module Shared {
class MetacharEscapeSanitizer extends Sanitizer, StringReplaceCall {
MetacharEscapeSanitizer() {
isGlobal() and
RegExp::alwaysMatchesMetaCharacter(getRegExp().getRoot(), ["<", "'", "\""])
(
RegExp::alwaysMatchesMetaCharacter(getRegExp().getRoot(), ["<", "'", "\""])
or
// or it's a global inverted char class.
getRegExp().getRoot().(RegExpCharacterClass).isInverted()
or
getRegExp().getRoot().(RegExpQuantifier).getAChild().(RegExpCharacterClass).isInverted()
)
}
}

View File

@@ -85,4 +85,8 @@
$("#id").html(anser.ansiToHtml(text)); // NOT OK
$("#id").html(new anser().process(text)); // NOT OK
$("section h1").each(function(){
$("nav ul").append("<a href='#" + $(this).text().toLowerCase().replace(/ /g, '-').replace(/[^\w-]+/g,'') + "'>Section</a>"); // OK
});
})();