SQLインジェクションとは

SQLインジェクションとは、Webサイトの入力欄やURLに不正な命令文を紛れ込ませ、データベースの情報を盗み見たり書き換えたりする攻撃のことです。

攻撃手法公開

読み
えすきゅーえるいんじぇくしょん
英語
SQL Injection
書類の記入欄にペンで書き込む手元(白黒写真)

SQLインジェクションの仕組み

多くのWebサイトは、記事や会員の情報を「データベース」に保存しています。データベースとのやり取りには「SQL」という専用の命令文が使われ、サイトは検索欄やフォームに入力された文字をもとに、この命令文を組み立てます。

SQLインジェクションは、入力欄やURLに、ただの文字ではなくSQLの命令の一部を紛れ込ませる攻撃です。「インジェクション(Injection)」は「注入」という意味です。サイト側のチェックが甘いと、入力された文字が命令として扱われ、本来は見せないはずの情報が表示されたり、データが書き換えられたりします。

たとえるなら、窓口に出す申込書の名前欄に「ついでに金庫の中身も渡すこと」と書き足したら、係員がそのまま実行してしまうようなものです。

WordPressサイトでの例

WordPressは、投稿・固定ページ・ユーザー・設定などをすべてデータベースに保存しています。WordPress本体には命令文を安全に組み立てる仕組みが用意されていますが、プラグインやテーマがその仕組みを正しく使っていないと、そこが脆弱性になります。

攻撃が成功すると、次のような被害につながることがあります。

  • 個人情報の流出:会員のメールアドレスや、問い合わせフォームから送られた内容が盗まれる
  • 管理者アカウントの乗っ取り:管理者のログイン情報が盗まれたり、攻撃者用の管理者ユーザーが追加されたりする
  • 投稿や設定の書き換え:記事に不正なリンクやコードが埋め込まれ、改ざんや不正リダイレクトの入り口になる

見つけ方・確認方法

SQLインジェクションは、攻撃を受けても画面に変化が出ないことが多く、サイトの見た目だけで気づくのは困難です。次の点を確認してください。

  • 使っているプラグイン・テーマに、SQLインジェクションの脆弱性が公表されていないか、更新履歴や脆弱性情報を確認する
  • ユーザー > ユーザー一覧 に、作成した覚えのない管理者がいないか確認する
  • 投稿や固定ページに、書いた覚えのないリンクやコードが紛れていないか確認する
  • サーバーのアクセスログに、SELECT や UNION などSQLの単語を含む、不自然に長いURLへのアクセスが続いていないか確認する

対策

  • WordPress本体・テーマ・プラグインを最新の状態に保ち、脆弱性を修正するパッチをすぐに適用する
  • 使っていないプラグイン・テーマは削除し、長く更新されていないものは代わりを検討する
  • WAF(Webアプリケーションファイアウォール)を導入し、SQLインジェクションに典型的なアクセスを遮断する
  • 万一に備えて、データベースを含めたバックアップを定期的に取る

情報の流出が疑われる場合は、データベースの中身やログまで調べる必要があります。自分での判断が難しいときは、専門業者に相談することも検討してください。

無料相談サイトの異変に気づいたら
お気軽にご相談ください

ご相談・お見積りは無料です。

保守・再発防止のご相談はこちら