@@ -16,24 +16,21 @@ import javascript
1616private import semmle.javascript.security.dataflow.XssThroughDomCustomizations
1717private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
1818private import semmle.javascript.security.dataflow.Xss:: Shared as Shared
19- import DataFlow :: PathGraph
19+ import XssFlow :: PathGraph
2020
2121/**
2222 * A taint-tracking configuration for reasoning about XSS.
2323 */
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 }
2626
27- override predicate isSource ( DataFlow:: Node source ) { source instanceof XssThroughDom :: Source }
27+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof DomBasedXss :: Sink }
2828
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 }
3530}
3631
32+ module XssFlow = TaintTracking:: Global< XssConfig > ;
33+
3734// Additional Source
3835class ReactUseQueryParams extends XssThroughDom:: Source {
3936 ReactUseQueryParams ( ) {
@@ -42,7 +39,7 @@ class ReactUseQueryParams extends XssThroughDom::Source {
4239 }
4340}
4441
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 )
4744select sink .getNode ( ) , source , sink , "Cross-site scripting vulnerability due to $@." ,
4845 source .getNode ( ) , "user-provided value"
0 commit comments