Closed6
[SQLインジェクション] [実例] 防衛省ワクチン予約システム
SQLインジェクション脆弱性が含まれていると、データベースの内容を書き換えられるなど実害が出ると思うが、実際にはどのようなことが起きるのか?
実際に現実世界で起きた実例をまとめて、SQLインジェクションに対する理解を深める。
具体例
SQLインジェクションとは
SQLインジェクション脆弱性は「SQLを呼び出している箇所」に発生する脆弱性のこと。
データベースの書き換えやデータベースの破壊など、情報漏洩が起こる場合があるので、被害が大きい。
SQLインジェクションを防ぐためには?
- フレームワーク側に脆弱性がある場合があるので、
フレームワークのバージョンアップを徹底
例えば、CakePHPの場合は、厳密にはフレームワークというよりもPHPライブラリのPDOのアップデートが大事。(アップデートに神経質になる必要はなさそう。SQLの構文が変わるみたいなことがあれば、ライブラリなどアップデートするので、そのタイミングを逃さないようにすれば良さそう。)
コード作成の際に人為的ミスで発生する脆弱性は具体的にどうすれば?
(特に何に注意すれば良いのかな?)
- 特定の文字はエスケープさせる(ホワイトリスト形式はだめ、人間では管理しきれない。ですのでライブラリを使う。)
- フレームワークを用いての開発で生のSQLを使わずにORMを使う
今回は、プレースホルダーまわりの可能性がある
PHPでSQLインジェクション攻撃の対策方法【PDO】参考記事
参考リンク
補足
- 短納期(多分3ヶ月とか)で発注受けて仕様も決まりきらないうちに「接種の予約だけができる」という要件を「必要最低限の機能で」リリースした可能性がある。
- 脆弱性を正規ルートで報告せずに、記事で拡散してしまっている背景がある。
このスクラップは2021/12/30にクローズされました