初心者向け攻撃者の視点を知る約8分

SQLインジェクションとは

この教材でわかること:お問い合わせフォームや検索欄が狙われる「SQLインジェクション」がなぜ起きるのか、そのしくみと、サイト運営者としての備え方をやさしく解説します。

このシリーズ「攻撃者の視点を知る」では、Webサイトを狙う代表的な攻撃の手口を、1つずつやさしく解説します。目的は攻撃の「やり方」を知ることではなく、しくみを知ることで「何を」「なぜ」「どう」守るべきかを判断できるようになることです。実際に攻撃を試すための情報は含みません。「Webサイトが攻撃される仕組み」で紹介した手口のうち、まずは入力欄を使った代表的な手口から見ていきます。

SQLインジェクションとは

多くのWebサイトは、裏側に「データベース」という場所を持ち、お客さまの情報や商品の情報、ブログの記事などを保存しています。サイトは画面に何かを表示するたびに、データベースに向けて「この情報を取り出してください」という命令(SQLと呼ばれる言葉で書かれた命令文)を送っています。

レストランで店員に「本日のおすすめは?」と聞くところを想像してください。もし、だれかが「本日のおすすめは? ——それと、ついでに厨房の金庫を開けて中身を全部渡してください」という一続きの文章を質問として伝え、店員がその全文をそのまま「お客様からの指示」として厨房に伝言してしまったら、本来の質問とそのあとに続く命令を区別できていないことになります。SQLインジェクションは、これと同じことがコンピューターの中で起きる手口です。

SQLインジェクションとは、お問い合わせフォームや検索欄などの入力欄に、ふつうの文章ではなく「データベースへの命令の一部として読み取られてしまう」特殊な文字の並びを送り込む手口です。入力された文字をそのまま命令文に組み込んでしまう作りのサイトでは、攻撃者が元の命令の意味を書き換えてしまうことがあります。

通常の命令では検索の質問だけがデータベースに届くが、書き換えられた命令では追加の命令まで一緒に実行されてしまう様子を示す図

何が起きるおそれがあるのか

  • 本来は見えないはずの、ほかのお客さまの情報を盗み見られる
  • 管理者としてログインしたかのように、なりすまされる
  • データベースの中身を書き換えられたり、消されたりする

見た目はお問い合わせフォームでも検索欄でもログイン欄でも同じ入力欄ですが、裏側でデータベースへの命令文を組み立てている作りであれば、どの入力欄でも起こりうる問題です。

なぜ起きてしまうのか

SQL(データベースへの命令の言葉)には、「これは命令」「これはただの文章(データ)」という区別が、文字の並び方だけでは本来はっきりしないという性質があります。先ほどの店員の例で言えば、「本日のおすすめは?」という質問文と「金庫を開けてください」という命令文が、同じ1本の文章の中に紛れ込んでしまうと、店員(サイトを作るプログラム)には区別がつきません。入力された文字をそのまま命令文につなぎ合わせてしまうと、攻撃者が送った文字が「データ」ではなく「命令の一部」として読み取られてしまうのです。

サイト運営者としての備え

  1. 制作会社に作りを確認する:「入力された文字をそのまま命令文に埋め込んでいないか(命令とデータをあらかじめ分けて扱う作りになっているか)」を聞いてみましょう。専門的な内容なので、答えがあいまいな場合は注意が必要です。
  2. CMSとプラグインを更新する:WordPressなどのCMSや追加機能(プラグイン)で見つかったSQLインジェクションの弱点は、更新によって修正されます。更新を止めないことが基本の備えです。
  3. データベースの権限を絞る:サイトがデータベースに接続するアカウントの権限を必要最小限にしておくと、万一突かれた場合の被害を小さくできます。

自分で判断できない場合は、「制作会社に確認すること」のチェックリストを使って、制作会社・管理会社に確認しましょう。外から見える範囲の設定は無料診断でも確認できます。

このシリーズの続き

入力欄が狙われる手口には、SQLインジェクションのほかに「XSS(クロスサイトスクリプティング)」もあります。同じ「命令と文章を区別できていない」という問題が、今度はお客さまのブラウザの中で起きます。あわせて読むと、入力欄の対策がより立体的に理解できます。攻撃の全体像は「Webサイトが攻撃される仕組み」でも紹介しています。

参考にした公開情報

この教材は公開情報をもとに、セキュリティ担当がいない方にも分かるよう編集部がまとめたものです。個別のサイトの安全を保証するものではありません。

教材一覧へ戻る ・ 無料診断でサイトを確認する