Skip to content

Commit fc429c1

Browse files
committed
Improve Mysql2 test
1 parent 1d7a39a commit fc429c1

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class UsersController < ActionController::Base
22
def mysql2_handler(event:, context:)
3-
name = params[:user_name]
3+
name = params[:user_name] # $ Source[rb/sql-injection]
44

55
conn = Mysql2::Client.new(
66
host: "127.0.0.1",
@@ -10,7 +10,7 @@ def mysql2_handler(event:, context:)
1010
results1 = conn.query("SELECT * FROM users")
1111

1212
# BAD: SQL statement constructed from user input
13-
results2 = conn.query("SELECT * FROM users WHERE username='#{name}'")
13+
results2 = conn.query("SELECT * FROM users WHERE username='#{name}'") # $ Alert[rb/sql-injection]
1414

1515
# GOOD: user input is escaped
1616
escaped = Mysql2::Client.escape(name)
@@ -21,10 +21,10 @@ def mysql2_handler(event:, context:)
2121
results4 = statement1.execute(1, name, :as => :array)
2222

2323
# BAD: SQL statement constructed from user input
24-
statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?")
24+
statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?") # $ Alert[rb/sql-injection]
2525
results4 = statement2.execute("password", :as => :array)
2626

2727
# NOT EXECUTED
2828
statement3 = conn.prepare("SELECT * FROM users WHERE username = ?")
2929
end
30-
end
30+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#select
2+
| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value |
3+
| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value |
4+
edges
5+
| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep |
6+
| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep |
7+
| Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:3:12:3:29 | ...[...] | provenance | |
8+
| Mysql2.rb:3:12:3:29 | ...[...] | Mysql2.rb:3:5:3:8 | name | provenance | |
9+
nodes
10+
| Mysql2.rb:3:5:3:8 | name | semmle.label | name |
11+
| Mysql2.rb:3:12:3:17 | call to params | semmle.label | call to params |
12+
| Mysql2.rb:3:12:3:29 | ...[...] | semmle.label | ...[...] |
13+
| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." |
14+
| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." |
15+
subpaths
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
query: queries/security/cwe-089/SqlInjection.ql
2+
postprocess:
3+
- utils/test/PrettyPrintModels.ql
4+
- utils/test/InlineExpectationsTestQuery.ql

0 commit comments

Comments
 (0)