Skip to content

Commit 15dfb97

Browse files
committed
Corrected cookie parameters properly in Python web analyzers
Signed-off-by: ksg97031 <ksg97031@gmail.com>
1 parent bfc5a39 commit 15dfb97

File tree

7 files changed

+15
-20
lines changed

7 files changed

+15
-20
lines changed

spec/functional_test/fixtures/python_flask/app.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
@app.teardown_appcontext
1313
def shutdown_session(exception=None):
14-
db_session.remove()
14+
db_session.remove()
1515

1616
@app.route('/sign', methods=['GET', 'POST'])
1717
def sign_sample():
@@ -28,6 +28,13 @@ def sign_sample():
2828

2929
return render_template('sign.html')
3030

31+
@app.route('/cookie', methods=['GET'])
32+
def cookie_test():
33+
if request.cookies.get('test') == "y":
34+
return "exist cookie"
35+
36+
return "no cookie"
37+
3138
@app.route('/login', methods=['POST'])
3239
def login_sample():
3340
if request.method == 'POST':
@@ -40,7 +47,7 @@ def login_sample():
4047
else:
4148
return "Fail"
4249

43-
return render_template('login.html')
50+
return render_template('login.html')
4451

4552
@app.route('/create_record', methods=['PUT'])
4653
def create_record():

spec/functional_test/testers/python_django_spec.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ extected_endpoints = [
1414
Endpoint.new("/links.html", "GET"),
1515
Endpoint.new("/upload", "GET", [Param.new("sign", "", "query"), Param.new("sign", "", "query"), Param.new("X_FORWARDED_FOR", "", "header"), Param.new("X_REAL_IP", "", "header")]),
1616
Endpoint.new("/upload", "POST", [Param.new("sign", "", "query"), Param.new("X_FORWARDED_FOR", "", "header"), Param.new("X_REAL_IP", "", "header")]),
17-
Endpoint.new("/not_found", "GET", [Param.new("Cookie['app_type']", "", "header")]),
17+
Endpoint.new("/not_found", "GET", [Param.new("app_type", "", "cookie")]),
1818
Endpoint.new("/test", "GET", [Param.new("test_param", "", "form")]),
1919
Endpoint.new("/test", "POST", [Param.new("test_param", "", "form")]),
2020
Endpoint.new("/test", "PUT", [Param.new("test_param", "", "form")]),

spec/functional_test/testers/python_fastapi_spec.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ extected_endpoints = [
44
Endpoint.new("/query/param-required/int", "GET", [Param.new("query", "", "query")]),
55
Endpoint.new("/items/{item_id}", "PUT", [Param.new("name", "", "form"), Param.new("size", "", "form")]),
66
Endpoint.new("/hidden_header", "GET", [Param.new("hidden_header", "", "header")]),
7-
Endpoint.new("/cookie_examples/", "GET", [Param.new("Cookie['data']", "", "header")]),
7+
Endpoint.new("/cookie_examples/", "GET", [Param.new("data", "", "cookie")]),
88
Endpoint.new("/dummypath", "POST", [Param.new("dummy", "", "json")]),
99
Endpoint.new("/main", "GET"),
1010
]

spec/functional_test/testers/python_flask_spec.cr

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ require "../func_spec.cr"
33
extected_endpoints = [
44
Endpoint.new("/sign", "GET"),
55
Endpoint.new("/sign", "POST", [Param.new("username", "", "form"), Param.new("password", "", "form")]),
6+
Endpoint.new("/cookie", "GET", [Param.new("test", "", "cookie")]),
67
Endpoint.new("/login", "POST", [Param.new("username", "", "form"), Param.new("password", "", "form")]),
78
Endpoint.new("/create_record", "PUT"),
89
Endpoint.new("/delete_record", "DELETE", [Param.new("name", "", "json")]),
@@ -12,5 +13,5 @@ extected_endpoints = [
1213

1314
FunctionalTester.new("fixtures/python_flask/", {
1415
:techs => 1,
15-
:endpoints => 7,
16+
:endpoints => 8,
1617
}, extected_endpoints).test_all

src/analyzer/analyzers/analyzer_django.cr

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class AnalyzerDjango < AnalyzerPython
1010
REQUEST_PARAM_FIELD_MAP = {
1111
"GET" => {["GET"], "query"},
1212
"POST" => {["POST"], "form"},
13-
"COOKIES" => {nil, "header"},
13+
"COOKIES" => {nil, "cookie"},
1414
"META" => {nil, "header"},
1515
"data" => {["POST", "PUT", "PATCH"], "form"},
1616
}
@@ -293,10 +293,6 @@ class AnalyzerDjango < AnalyzerPython
293293
if param_name.starts_with? "HTTP_"
294294
param_name = param_name[5..]
295295
end
296-
elsif noir_param_type == "header"
297-
if field_name == "COOKIES"
298-
param_name = "Cookie['#{param_name}']"
299-
end
300296
end
301297

302298
# If it receives a specific parameter, it is considered to allow the method.

src/analyzer/analyzers/analyzer_fastapi.cr

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,6 @@ class AnalyzerFastAPI < AnalyzerPython
100100
# Get param type by default value first
101101
if param.default.size != 0
102102
param_type = infer_parameter_type(param.default)
103-
if param_type == "cookie"
104-
param_type = "header"
105-
param.name = "Cookie['#{param.name}']"
106-
end
107103
end
108104

109105
# Get param type by type if not found

src/analyzer/analyzers/analyzer_flask.cr

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class AnalyzerFlask < AnalyzerPython
1111
"files" => {["POST", "PUT", "PATCH", "DELETE"], "form"},
1212
"values" => {["GET", "POST", "PUT", "PATCH", "DELETE"], "query"},
1313
"json" => {["POST", "PUT", "PATCH", "DELETE"], "json"},
14-
"cookie" => {nil, "header"},
14+
"cookie" => {nil, "cookie"},
1515
"headers" => {nil, "header"},
1616
}
1717

@@ -200,11 +200,6 @@ class AnalyzerFlask < AnalyzerPython
200200
matches.each do |parameter_match|
201201
next if parameter_match.size != 2
202202
param_name = parameter_match[1]
203-
if noir_param_type == "header"
204-
if field_name == "cookie"
205-
param_name = "Cookie['#{param_name}']"
206-
end
207-
end
208203

209204
suspicious_params << Param.new(param_name, "", noir_param_type)
210205
end

0 commit comments

Comments
 (0)