Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8aaa36b

Browse files
committed
Python: Port ReflectedXss query (and tests)
1 parent df6fd53 commit 8aaa36b

4 files changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @name Reflected server-side cross-site scripting
3+
* @description Writing user input directly to a web page
4+
* allows for a cross-site scripting vulnerability.
5+
* @kind path-problem
6+
* @problem.severity error
7+
* @sub-severity high
8+
* @precision high
9+
* @id py/reflective-xss
10+
* @tags security
11+
* external/cwe/cwe-079
12+
* external/cwe/cwe-116
13+
*/
14+
15+
import python
16+
import experimental.dataflow.DataFlow
17+
import experimental.dataflow.TaintTracking
18+
import experimental.semmle.python.Concepts
19+
import experimental.dataflow.RemoteFlowSources
20+
import DataFlow::PathGraph
21+
22+
class ReflectedXssConfiguration extends TaintTracking::Configuration {
23+
ReflectedXssConfiguration() { this = "ReflectedXssConfiguration" }
24+
25+
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
26+
27+
override predicate isSink(DataFlow::Node sink) {
28+
exists(HTTP::Server::HttpResponse response |
29+
response.getContentType().toLowerCase().matches("text/html%") and
30+
sink = response.getBody()
31+
)
32+
}
33+
}
34+
35+
from ReflectedXssConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink
36+
where config.hasFlowPath(source, sink)
37+
select sink.getNode(), source, sink, "Cross-site scripting vulnerability due to $@.",
38+
source.getNode(), "a user-provided value"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
edges
2+
nodes
3+
#select
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
experimental/Security-new-dataflow/CWE-079/ReflectedXss.ql
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from flask import Flask, request, make_response, escape
2+
3+
app = Flask(__name__)
4+
5+
@app.route('/unsafe')
6+
def unsafe():
7+
first_name = request.args.get('name', '')
8+
return make_response("Your name is " + first_name)
9+
10+
@app.route('/safe')
11+
def safe():
12+
first_name = request.args.get('name', '')
13+
return make_response("Your name is " + escape(first_name))

0 commit comments

Comments
 (0)