Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a778efe

Browse files
authored
Merge pull request #2216 from asger-semmle/xss-encodeURIComponent
Approved by max-schaefer
2 parents ecd4c08 + 94dd9a1 commit a778efe

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

  • javascript/ql

javascript/ql/src/semmle/javascript/security/dataflow/Xss.qll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function test() {
2+
let loc = window.location.href;
3+
$('<a href="' + encodeURIComponent(loc) + '">click</a>'); // OK
4+
}

0 commit comments

Comments
 (0)