Skip to content

Commit cc6f641

Browse files
committed
Ruby: rack - start modelling request inputs
1 parent b6912de commit cc6f641

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

ruby/ql/lib/codeql/ruby/frameworks/Rack.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
module Rack {
99
import rack.internal.App
10+
import rack.internal.Request
1011
import rack.internal.Response::Public as Response
1112

1213
/** DEPRECATED: Alias for App::AppCandidate */
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Provides modeling for the `Request` component of the `Rack` library.
3+
*/
4+
5+
private import codeql.ruby.AST
6+
private import codeql.ruby.ApiGraphs
7+
private import codeql.ruby.Concepts
8+
private import codeql.ruby.DataFlow
9+
10+
/**
11+
* Provides modeling for the `Request` component of the `Rack` library.
12+
*/
13+
module Request {
14+
private class RackRequest extends API::Node {
15+
RackRequest() { this = API::getTopLevelMember("Rack").getMember("Request").getInstance() }
16+
}
17+
18+
private class RackRequestParamsAccess extends Http::Server::RequestInputAccess::Range {
19+
RackRequestParamsAccess() {
20+
this = any(RackRequest req).getAMethodCall(["params", "query_string", "[]", "fullpath"])
21+
}
22+
23+
override string getSourceType() { result = "Rack::Request#params" }
24+
25+
override Http::Server::RequestInputKind getKind() {
26+
result = Http::Server::parameterInputKind()
27+
}
28+
}
29+
30+
private class RackRequestCookiesAccess extends Http::Server::RequestInputAccess::Range {
31+
RackRequestCookiesAccess() { this = any(RackRequest req).getAMethodCall("cookies") }
32+
33+
override string getSourceType() { result = "Rack::Request#cookies" }
34+
35+
override Http::Server::RequestInputKind getKind() { result = Http::Server::cookieInputKind() }
36+
}
37+
}

0 commit comments

Comments
 (0)