SQL Injection
攻撃によってデータベースの不正利用をまねく可能性がある
SQL文の組み立て方
発生しうる脅威
DBに蓄積された非公開情報の閲覧
個人情報の漏洩など
DBに蓄積された情報の改ざん、消去
ウェブページの改ざん、パスワード変更、システム停止など
認証回避による不正ログイン
システムの乗っ取り、他の攻撃の踏み台としての悪用
SQL文の組み立てにはplaceholderを使う
例えば、http requestのqueryの値をSQLに埋め込むときなど
where postId = ${postId}
のようなものを書く時にplaceholderを使う
こっちの方が安全
プレースホルダのままSQL文をコンパイルしておき、データベースエンジン側で値を割り当てる方式
アプリケーション側のデータベース接続ライブラリ内で値をエスケープ処理してプレースホルダにはめ込む方式
例
こういう埋め込みをしたい時に
sqlSELECT * FROM users WHERE id = '$id'
'; DELETE FROM users --
という文字列をそのまま埋め込むと
sqlSELECT * FROM users WHERE id = ''; DELETE FROM users --'
となり、文法的に正しいSQLができる
--
はコメント

これは users
tableの全recordを削除する
参考
>Also Me: Spend all day making memes
>