@@ -16,24 +16,21 @@ import javascript
16
16
private import semmle.javascript.security.dataflow.XssThroughDomCustomizations
17
17
private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
18
18
private import semmle.javascript.security.dataflow.Xss:: Shared as Shared
19
- import DataFlow :: PathGraph
19
+ import XssFlow :: PathGraph
20
20
21
21
/**
22
22
* A taint-tracking configuration for reasoning about XSS.
23
23
*/
24
- class XssConfiguration extends TaintTracking :: Configuration {
25
- XssConfiguration ( ) { this = "XssReact" }
24
+ module XssConfig implements DataFlow :: ConfigSig {
25
+ predicate isSource ( DataFlow :: Node source ) { source instanceof XssThroughDom :: Source }
26
26
27
- override predicate isSource ( DataFlow:: Node source ) { source instanceof XssThroughDom :: Source }
27
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof DomBasedXss :: Sink }
28
28
29
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof DomBasedXss:: Sink }
30
-
31
- override predicate isSanitizer ( DataFlow:: Node node ) {
32
- super .isSanitizer ( node ) or
33
- node instanceof DomBasedXss:: Sanitizer
34
- }
29
+ predicate isBarrier ( DataFlow:: Node node ) { node instanceof DomBasedXss:: Sanitizer }
35
30
}
36
31
32
+ module XssFlow = TaintTracking:: Global< XssConfig > ;
33
+
37
34
// Additional Source
38
35
class ReactUseQueryParams extends XssThroughDom:: Source {
39
36
ReactUseQueryParams ( ) {
@@ -42,7 +39,7 @@ class ReactUseQueryParams extends XssThroughDom::Source {
42
39
}
43
40
}
44
41
45
- from XssConfiguration cfg , DataFlow :: PathNode source , DataFlow :: PathNode sink
46
- where cfg . hasFlowPath ( source , sink )
42
+ from XssFlow :: PathNode source , XssFlow :: PathNode sink
43
+ where XssFlow :: flowPath ( source , sink )
47
44
select sink .getNode ( ) , source , sink , "Cross-site scripting vulnerability due to $@." ,
48
45
source .getNode ( ) , "user-provided value"
0 commit comments