@@ -16,51 +16,54 @@ abstract class HtmlSanitizerCall extends DataFlow::CallNode {
1616 abstract DataFlow:: Node getInput ( ) ;
1717}
1818
19+ pragma [ noinline]
20+ private DataFlow:: SourceNode htmlSanitizerFunction ( ) {
21+ result = DataFlow:: moduleMember ( "ent" , "encode" )
22+ or
23+ result = DataFlow:: moduleMember ( "entities" , "encodeHTML" )
24+ or
25+ result = DataFlow:: moduleMember ( "entities" , "encodeXML" )
26+ or
27+ result = DataFlow:: moduleMember ( "escape-goat" , "escape" )
28+ or
29+ result = DataFlow:: moduleMember ( "he" , "encode" )
30+ or
31+ result = DataFlow:: moduleMember ( "he" , "escape" )
32+ or
33+ result = DataFlow:: moduleImport ( "sanitize-html" )
34+ or
35+ result = DataFlow:: moduleMember ( "sanitizer" , "escape" )
36+ or
37+ result = DataFlow:: moduleMember ( "sanitizer" , "sanitize" )
38+ or
39+ result = DataFlow:: moduleMember ( "validator" , "escape" )
40+ or
41+ result = DataFlow:: moduleImport ( "xss" )
42+ or
43+ result = DataFlow:: moduleMember ( "xss-filters" , _)
44+ or
45+ result = LodashUnderscore:: member ( "escape" )
46+ or
47+ exists ( DataFlow:: PropRead read | read = result |
48+ read .getPropertyName ( ) = "sanitize" and
49+ read .getBase ( ) .asExpr ( ) .( VarAccess ) .getName ( ) = "DOMPurify"
50+ )
51+ or
52+ exists ( string name | name = "encode" or name = "encodeNonUTF" |
53+ result =
54+ DataFlow:: moduleMember ( "html-entities" , _) .getAnInstantiation ( ) .getAPropertyRead ( name ) or
55+ result = DataFlow:: moduleMember ( "html-entities" , _) .getAPropertyRead ( name )
56+ )
57+ or
58+ result = Closure:: moduleImport ( "goog.string.htmlEscape" )
59+ }
60+
1961/**
2062 * Matches HTML sanitizers from known NPM packages as well as home-made sanitizers (matched by name).
2163 */
2264private class DefaultHtmlSanitizerCall extends HtmlSanitizerCall {
2365 DefaultHtmlSanitizerCall ( ) {
24- exists ( DataFlow:: SourceNode callee | this = callee .getACall ( ) |
25- callee = DataFlow:: moduleMember ( "ent" , "encode" )
26- or
27- callee = DataFlow:: moduleMember ( "entities" , "encodeHTML" )
28- or
29- callee = DataFlow:: moduleMember ( "entities" , "encodeXML" )
30- or
31- callee = DataFlow:: moduleMember ( "escape-goat" , "escape" )
32- or
33- callee = DataFlow:: moduleMember ( "he" , "encode" )
34- or
35- callee = DataFlow:: moduleMember ( "he" , "escape" )
36- or
37- callee = DataFlow:: moduleImport ( "sanitize-html" )
38- or
39- callee = DataFlow:: moduleMember ( "sanitizer" , "escape" )
40- or
41- callee = DataFlow:: moduleMember ( "sanitizer" , "sanitize" )
42- or
43- callee = DataFlow:: moduleMember ( "validator" , "escape" )
44- or
45- callee = DataFlow:: moduleImport ( "xss" )
46- or
47- callee = DataFlow:: moduleMember ( "xss-filters" , _)
48- or
49- callee = LodashUnderscore:: member ( "escape" )
50- or
51- exists ( DataFlow:: PropRead read | read = callee |
52- read .getPropertyName ( ) = "sanitize" and
53- read .getBase ( ) .asExpr ( ) .( VarAccess ) .getName ( ) = "DOMPurify"
54- )
55- or
56- exists ( string name | name = "encode" or name = "encodeNonUTF" |
57- callee =
58- DataFlow:: moduleMember ( "html-entities" , _) .getAnInstantiation ( ) .getAPropertyRead ( name ) or
59- callee = DataFlow:: moduleMember ( "html-entities" , _) .getAPropertyRead ( name )
60- )
61- or
62- callee = Closure:: moduleImport ( "goog.string.htmlEscape" )
63- )
66+ this = htmlSanitizerFunction ( ) .getACall ( )
6467 or
6568 // Match home-made sanitizers by name.
6669 exists ( string calleeName | calleeName = getCalleeName ( ) |
0 commit comments