SQLインジェクション 【SQL injection】 SQLi攻撃
概要
SQLインジェクション(SQL injection)とは、データベースと連動したWebアプリケーションなどに対する攻撃手法の一つで、検索文字列など外部から指定するパラメータの一部にSQL文の断片などを混入させ不正な操作を行うもの。また、そのような攻撃を可能にする脆弱性。 “injection” は「注入」の意。データベースを利用するWebサイトの中には閲覧者の求めに応じて動的にプログラムを起動し、データベース管理システム(DBMS)へデータの検索や更新などを依頼するものがあるが、その際に「SQL」(Structured Query Language)と呼ばれる問い合わせ言語が標準的に利用される。
検索機能などを実装するために、閲覧者がフォームなどに入力した文字列をプログラムが受け取り、あらかじめ用意されたSELECT文などの一部に埋め込んでDBMSへ渡し、検索と該当データの抽出を依頼する処理がよく行われる。
その際、悪意のある攻撃者が検索文字列として引用符や条件式などを組み合わせたSQL文の断片を渡すことにより、開発者が想定していないSQL文が生成・実行され、本来得られないはずのデータを出力してしまったり、保存されたデータが破壊・改竄されることがある。
SQLインジェクションの被害で最も多いのは個人情報などデータベースに保存された重要なデータや機密データの漏洩で、過去に名簿やアカウントリストなどの流出事件が様々なサイトで発生している。また、Webサイトの改竄に悪用された場合、Webページ上にWebブラウザを攻撃するコードなどを埋め込まれる場合もあり、サイトを訪れた閲覧者に二次被害が広がってしまう。
対策としては、単純な文字列連結で動的にSQL文を生成するのをやめてプレースホルダ(バインド機構)やプリペアードクエリ(プリペアードステートメント)のような仕組みを活用したり、渡された入力値を入念にチェックして特定の文字を適切にエスケープ(無害な文字に置換)するといった手法がよく知られ、これら複数の手法を組みわせることも推奨されている。
(2018.7.20更新)
関連用語
関連リンク (外部サイト)
他の辞典による解説 (外部サイト)
- ウィキペディア 「SQLインジェクション」
- 総務省 国民のためのサイバーセキュリティサイト 用語集 「SQLインジェクション」
- imidas 時事用語事典 「SQLインジェクション」
- 日経 xTECH Networkキーワード 「SQLインジェクション」
- MDN Web Docs 用語集 「SQL インジェクション」
- JPNIC インターネット用語1分解説 「SQLインジェクション」
- SOMPO CYBER SECURITY サイバーセキュリティ用語集 「SQLインジェクション」
- @IT セキュリティ用語事典 「SQLインジェクション」
- IDCフロンティア クラウド・データセンター用語集 「SQLインジェクション」
- Insider's Computer Dictionary 「SQLインジェクション」
この記事を参照している文書など (外部サイト)
- 専修法学論集 115号「不正アクセス行為の発生状況の現状と課題(2)」(PDFファイル)にて引用 (2012年7月)
- 大阪産業大学経営論集 13号「個人情報漏えいの事例分析と対策についての一検討」(PDFファイル)にて引用 (2012年6月)