Skip to content

Commit f31c6ee

Browse files
committed
Add support for XSS sanitizer lib
1 parent 2e6d302 commit f31c6ee

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

javascript/frameworks/xsjs/ext/xsjs.model.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,5 @@ extensions:
6868
pack: codeql/javascript-all
6969
extensible: summaryModel
7070
data:
71-
- [global, "Member[JSON].Member[parse]", "Argument[0]", "ReturnValue", taint]
71+
- [global, "Member[JSON].Member[parse]", "Argument[0]", "ReturnValue", taint]
72+
- ["@sap/xss-secure", "Member[encodeCSS,encodeHTML,encodeJS,encodeURL,encodeXML]", "Argument[0]", "ReturnValue", "taint"]

javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSReflectedXssQuery.qll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,14 @@ class Configuration extends TaintTracking::Configuration {
3535
)
3636
)
3737
}
38+
39+
override predicate isSanitizer(DataFlow::Node node) {
40+
super.isSanitizer(node)
41+
or
42+
node instanceof DomBasedXss::Sanitizer
43+
or
44+
node =
45+
DataFlow::moduleMember("@sap/xss-secure",
46+
["encodeCSS", "encodeHTML", "encodeJS", "encodeURL", "encodeXML"]).getACall().getArgument(0)
47+
}
3848
}

javascript/frameworks/xsjs/test/queries/XSJSReflectedXss/XSJSReflectedXss.xsjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,16 @@ function test3(requestParameters) {
3636
test1(requestParameters);
3737
test2(requestParameters);
3838
test3(requestParameters);
39+
40+
/**
41+
* False positive case: the value is sanitized
42+
*/
43+
var xssSecure = $.require('@sap/xss-secure');
44+
function test4(requestParameters) {
45+
let someParameterValue4 = requestParameters.get("someParameter4");
46+
$.response.contentType = "text/html";
47+
$.response.setBody(requestParameterHandler(xssSecure.encodeHTML(someParameterValue4)));
48+
$.response.status = $.net.http.OK;
49+
}
50+
51+
test4(requestParameters);

0 commit comments

Comments
 (0)