【SQL】SQL アンチパターン ~ SQL Injection(SQLインジェクション) ~

■ はじめに

Wise men learn by other men's mistakes;
fools by  their own

https://dk521123.hatenablog.com/entry/2016/07/02/212547

の続き。
SQLインジェクション(SQL Injection, Injection:混入) について、学ぶ

 ■ SQLインジェクションとは?

 * SQL命令に不正なパラメータを引き渡すことで、
   開発者が意図していなかったSQLが生成・実行できてしまうこと

 ■ サンプル

... = "SELECT * FROM userTable WHERE userID = '"
 + userID + "' AND password = '" + password + "';";

解説

で、入力値に「mike」「' OR '1'='1」と入力すると、

SELECT * FROM userTable WHERE userID = 'mike' AND password = '' OR '1'='1'

となり、ORの後は常に真なので、パスワードが異なるにもかかわらず認証されてしまう。

 ■ 対策

 * SQL文の組立てに静的プレースホルダを使用する

 参考資料

http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html
以下の動画は、分かりやすく解説している http://www.youtube.com/watch?v=9fXzaMACldo&feature=related
http://www.youtube.com/watch?v=Hagwm9F6TDo&feature=related

 関連記事

 SQL アンチパターン ~ 目次 ~
https://dk521123.hatenablog.com/entry/2016/07/02/212547
セキュリティ攻撃一覧
https://dk521123.hatenablog.com/entry/2011/07/19/110702