@@ -13,6 +13,7 @@ private import semmle.code.csharp.frameworks.system.web.UI
13
13
private import semmle.code.csharp.frameworks.system.web.ui.WebControls
14
14
private import semmle.code.csharp.frameworks.system.windows.Forms
15
15
private import semmle.code.csharp.security.dataflow.flowsources.Remote
16
+ private import semmle.code.csharp.dataflow.ExternalFlow
16
17
private import semmle.code.asp.AspNet
17
18
18
19
/**
@@ -21,21 +22,23 @@ private import semmle.code.asp.AspNet
21
22
*/
22
23
abstract class HtmlSink extends DataFlow:: ExprNode , RemoteFlowSink { }
23
24
25
+ private class ExternalHtmlSink extends HtmlSink {
26
+ ExternalHtmlSink ( ) { sinkNode ( this , "html" ) }
27
+ }
28
+
24
29
/**
25
30
* An expression that is used as an argument to an HTML sink method on
26
31
* `HttpResponse`.
27
32
*/
28
- class HttpResponseSink extends HtmlSink {
29
- HttpResponseSink ( ) {
30
- exists ( Method m , SystemWebHttpResponseClass responseClass |
31
- m = responseClass .getAWriteMethod ( ) or
32
- m = responseClass .getAWriteFileMethod ( ) or
33
- m = responseClass .getATransmitFileMethod ( ) or
34
- m = responseClass .getABinaryWriteMethod ( )
35
- |
36
- // Calls to these methods, or overrides of them
37
- this .getExpr ( ) = m .getAnOverrider * ( ) .getParameter ( 0 ) .getAnAssignedArgument ( )
38
- )
33
+ private class HttpResponseSinkModelCsv extends SinkModelCsv {
34
+ override predicate row ( string row ) {
35
+ row =
36
+ [
37
+ "System.Web;HttpResponse;false;Write;;;Argument[0];html" ,
38
+ "System.Web;HttpResponse;false;WriteFile;;;Argument[0];html" ,
39
+ "System.Web;HttpResponse;false;TransmitFile;;;Argument[0];html" ,
40
+ "System.Web;HttpResponse;false;BinaryWrite;;;Argument[0];html"
41
+ ]
39
42
}
40
43
}
41
44
0 commit comments