Skip to content

Commit 1fa183e

Browse files
committed
Improve Sqlite3 test
1 parent d4bb92b commit 1fa183e

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#select
2+
| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value |
3+
edges
4+
| sqlite3.rb:25:5:25:12 | category | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | provenance | AdditionalTaintStep |
5+
| sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:25:16:25:32 | ...[...] | provenance | |
6+
| sqlite3.rb:25:16:25:32 | ...[...] | sqlite3.rb:25:5:25:12 | category | provenance | |
7+
nodes
8+
| sqlite3.rb:25:5:25:12 | category | semmle.label | category |
9+
| sqlite3.rb:25:16:25:21 | call to params | semmle.label | call to params |
10+
| sqlite3.rb:25:16:25:32 | ...[...] | semmle.label | ...[...] |
11+
| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | semmle.label | "select * from table where cat..." |
12+
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

ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@
2020
end
2121

2222

23-
class MyDatabaseWrapper
24-
def initialize(filename)
25-
@db = SQLite3::Database.new(filename, results_as_hash: true)
26-
end
27-
28-
def select_rows(category)
29-
@db.execute("select * from table")
30-
end
23+
class SqliteController < ActionController::Base
24+
def sqlite3_handler
25+
category = params[:category] # $ Source[rb/sql-injection]
26+
db = SQLite3::Database.new "test.db"
27+
28+
# BAD: SQL injection vulnerability
29+
db.execute("select * from table where category = '#{category}'") # $ Alert[rb/sql-injection]
30+
31+
# GOOD: Sanitized by SQLite3::Database.quote
32+
sanitized_category = SQLite3::Database.quote(category)
33+
db.execute("select * from table where category = '#{sanitized_category}'")
34+
end
3135
end

0 commit comments

Comments
 (0)