読み方:エスキューエルインジェクション
SQLインジェクション 【SQL injection】
概要
SQLインジェクション(SQL injection)とは、データベースと連動したWebアプリケーションなどに対する攻撃手法の一つで、検索文字列など外部から指定するパラメータの一部にSQL文の断片などを混入させ不正な操作を行うもの。また、そのような攻撃を可能にする脆弱性。データベースを利用するWebサイトの中には閲覧者の求めに応じて動的にプログラムを起動し、データベース管理システム(DBMS)へデータの検索や更新などを依頼するものがあるが、その際に「SQL」(Structured Query Language)と呼ばれる問い合わせ言語が標準的に利用される。
検索機能などを実装するために、閲覧者がフォームなどに入力した文字列をプログラムが受け取り、あらかじめ用意されたSELECT文などの一部に埋め込んでDBMSへ渡し、検索と該当データの抽出を依頼する処理がよく行われる。
その際、悪意のある攻撃者が検索文字列として引用符や条件式などを組み合わせたSQL文の断片を渡すことにより、開発者が想定していないSQL文が生成・実行され、本来得られないはずのデータを出力してしまったり、保存されたデータが破壊・改竄されることがある。“injection” は「注入」の意。
SQLインジェクションの被害で最も多いのは個人情報などデータベースに保存された重要なデータや機密データの漏洩で、過去に名簿やアカウントリストなどの流出事件が様々なサイトで発生している。また、Webサイトの改竄に悪用された場合、Webページ上にWebブラウザを攻撃するコードなどを埋め込まれる場合もあり、サイトを訪れた閲覧者に二次被害が広がってしまう。
対策としては、単純な文字列連結で動的にSQL文を生成するのをやめてプレースホルダ(バインド機構)やプリペアードクエリ(プリペアードステートメント)のような仕組みを活用したり、渡された入力値を入念にチェックして特定の文字を適切にエスケープ(無害な文字に置換)するといった手法がよく知られ、これら複数の手法を組みわせることも推奨されている。
(2018.7.20更新)
データベースの用語一覧
その他の関連用語
関連リンク (外部サイト)
試験出題履歴
基本情報技術者試験 : 【令6公 問10】 【令5修6 問33】 【令4修12 問41】 【令4修6 問41】 【令3修1 問41】 【令2修7 問35】 【令2修1 問43】 【令1修12 問39】 【令1修7 問41】 【平30修12 問38】 【平30春 問41】 【平30修1 問42】 【平29秋 問39】 【平29修1 問40】 【平28修6 問37】 【平28春 問37】 【平28修1 問39】 【平27秋 問42】 【平27修6 問39】 【平27春 問42】 【平26修7 問39】 【平25修12 問42】 【平25春 問40】 【平24秋 問40】 【平23修7 問44】 【平23修6 問44】 【平21修7 問44】