システムで想定外のSQLコマンドを実行する攻撃手法
例
例えば、変数where
に適切な条件が設定されることを想定して
statement = "SELECT * FROM table WHERE " + where + " ;"
db.execute(statement)
のようなスクリプトを作ったとします。
ここで、where
に
where = "name; DROP TABLE table;"
のような値が入っていた場合に、次のようなコマンドが実行されることになり、セキュリティ上のリスクとなるようです。
SELECT * FROM table WHERE name;
DROP TABLE table;
この手法は、入力(今の場合は変数where
)を適切にエスケープすることで回避可能なようです。
Python
PythonでSQLiteを使う場合は、文字列操作でSQLコマンドを作らないで、次のようにした方が良いそうです。
db.execute("SELECT * FROM table WHERE name=?", (name,))