・コードでSQL文を生成する際に、文字列をそのまま受け取り条件分として使用しない様注意する
※プレースホルダを使用しない場合の書き方
入力値のhoge=['111111','2222222'...]があるとして
この値をそのままWHERE句の条件に設定するのはNG
よくない例
hoge = ['111111', '22222222']
query = "SELECT * FROM testTable WHERE id IN ({});".format(
",".join(f"'{h}'" for h in hoge)
)
print(query)
出力結果
SELECT * FROM testTable WHERE id IN ('111111','22222222');
SQLインジェクションを考慮した安全な例(おそらく)
hoge = ['111111', '22222222']
query = "SELECT * FROM testTable WHERE id IN ({});".format(
",".join(str(int(h)) for h in hoge)
)
print(query)
出力結果
SELECT * FROM testTable WHERE id IN (111111,22222222);
strで受け取り、intに変換することで不正な文字列であればValueErrorで
落ちる為、不正なクエリ文の入力を弾くことができる