mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
Merge pull request #2216 from asger-semmle/xss-encodeURIComponent
Approved by max-schaefer
This commit is contained in:
@@ -39,6 +39,18 @@ module Shared {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A call to `encodeURI` or `encodeURIComponent`, viewed as a sanitizer for
|
||||||
|
* XSS vulnerabilities.
|
||||||
|
*/
|
||||||
|
class UriEncodingSanitizer extends Sanitizer, DataFlow::CallNode {
|
||||||
|
UriEncodingSanitizer() {
|
||||||
|
exists(string name | this = DataFlow::globalVarRef(name).getACall() |
|
||||||
|
name = "encodeURI" or name = "encodeURIComponent"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provides classes and predicates for the DOM-based XSS query. */
|
/** Provides classes and predicates for the DOM-based XSS query. */
|
||||||
@@ -251,6 +263,8 @@ module DomBasedXss {
|
|||||||
* so any such replacement stops taint propagation.
|
* so any such replacement stops taint propagation.
|
||||||
*/
|
*/
|
||||||
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
||||||
|
|
||||||
|
private class UriEncodingSanitizer extends Sanitizer, Shared::UriEncodingSanitizer { }
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provides classes and predicates for the reflected XSS query. */
|
/** Provides classes and predicates for the reflected XSS query. */
|
||||||
@@ -294,6 +308,8 @@ module ReflectedXss {
|
|||||||
* so any such replacement stops taint propagation.
|
* so any such replacement stops taint propagation.
|
||||||
*/
|
*/
|
||||||
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
||||||
|
|
||||||
|
private class UriEncodingSanitizer extends Sanitizer, Shared::UriEncodingSanitizer { }
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provides classes and predicates for the stored XSS query. */
|
/** Provides classes and predicates for the stored XSS query. */
|
||||||
@@ -320,4 +336,6 @@ module StoredXss {
|
|||||||
* so any such replacement stops taint propagation.
|
* so any such replacement stops taint propagation.
|
||||||
*/
|
*/
|
||||||
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
private class MetacharEscapeSanitizer extends Sanitizer, Shared::MetacharEscapeSanitizer { }
|
||||||
|
|
||||||
|
private class UriEncodingSanitizer extends Sanitizer, Shared::UriEncodingSanitizer { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
function test() {
|
||||||
|
let loc = window.location.href;
|
||||||
|
$('<a href="' + encodeURIComponent(loc) + '">click</a>'); // OK
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user