@@ -39,6 +39,18 @@ module Shared {
3939 )
4040 }
4141 }
42+
43+ /**
44+ * A call to `encodeURI` or `encodeURIComponent`, viewed as a sanitizer for
45+ * XSS vulnerabilities.
46+ */
47+ class UriEncodingSanitizer extends Sanitizer , DataFlow:: CallNode {
48+ UriEncodingSanitizer ( ) {
49+ exists ( string name | this = DataFlow:: globalVarRef ( name ) .getACall ( ) |
50+ name = "encodeURI" or name = "encodeURIComponent"
51+ )
52+ }
53+ }
4254}
4355
4456/** Provides classes and predicates for the DOM-based XSS query. */
@@ -251,6 +263,8 @@ module DomBasedXss {
251263 * so any such replacement stops taint propagation.
252264 */
253265 private class MetacharEscapeSanitizer extends Sanitizer , Shared:: MetacharEscapeSanitizer { }
266+
267+ private class UriEncodingSanitizer extends Sanitizer , Shared:: UriEncodingSanitizer { }
254268}
255269
256270/** Provides classes and predicates for the reflected XSS query. */
@@ -294,6 +308,8 @@ module ReflectedXss {
294308 * so any such replacement stops taint propagation.
295309 */
296310 private class MetacharEscapeSanitizer extends Sanitizer , Shared:: MetacharEscapeSanitizer { }
311+
312+ private class UriEncodingSanitizer extends Sanitizer , Shared:: UriEncodingSanitizer { }
297313}
298314
299315/** Provides classes and predicates for the stored XSS query. */
@@ -320,4 +336,6 @@ module StoredXss {
320336 * so any such replacement stops taint propagation.
321337 */
322338 private class MetacharEscapeSanitizer extends Sanitizer , Shared:: MetacharEscapeSanitizer { }
339+
340+ private class UriEncodingSanitizer extends Sanitizer , Shared:: UriEncodingSanitizer { }
323341}
0 commit comments