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()
)
}
}