generated at
SQL Injection
攻撃によってデータベースの不正利用をまねく可能性があるSQL文の組み立て方

発生しうる脅威
DBに蓄積された非公開情報の閲覧
個人情報の漏洩など
DBに蓄積された情報の改ざん、消去
ウェブページの改ざん、パスワード変更、システム停止など
認証回避による不正ログイン
ストアドプロシージャ等を利用したOSコマンドの実行
システムの乗っ取り、他の攻撃の踏み台としての悪用


SQL文の組み立てにはplaceholderを使う
例えば、http requestのqueryの値をSQLに埋め込むときなど
where postId = ${postId} のようなものを書く時にplaceholderを使う
こっちの方が安全
プレースホルダのままSQL文をコンパイルしておき、データベースエンジン側で値を割り当てる方式
アプリケーション側のデータベース接続ライブラリ内で値をエスケープ処理してプレースホルダにはめ込む方式


こういう埋め込みをしたい時に
sql
SELECT * FROM users WHERE id = '$id'
'; DELETE FROM users -- という文字列をそのまま埋め込むと
sql
SELECT * FROM users WHERE id = ''; DELETE FROM users --'
となり、文法的に正しいSQLができる
-- はコメントmrsekut
これは users tableの全recordを削除する


参考


>@orange_8361: Me: Making slides takes time
>Also Me: Spend all day making memes
>