SQLインジェクションとは?仕組み・被害・対策
監修:JIISセキュリティラボ監修者情報を見る
定義
SQLインジェクションとは、Webサイトの入力欄やURLに不正なSQL(データベース命令)の断片を送り込み、データベースを攻撃者の意図どおりに操作する攻撃です。個人情報やクレジットカード情報の大量漏えい事故の代表的な原因のひとつで、検索フォームやログイン画面など、データベースとつながるあらゆる入力箇所が標的になります。
仕組み
Webアプリケーションは、利用者の入力(検索語・ID・パスワードなど)を組み込んだSQL文を作ってデータベースに問い合わせます。このとき入力値の扱いが不適切だと、攻撃者が入力欄に「'; --」のような特殊な文字列を仕込むことで、開発者の意図しないSQL文が実行されてしまいます。
成立すると、本来見えないはずの会員情報の取得、認証の回避(パスワードなしのログイン)、データの改ざん・削除まで、データベースに対するほぼ任意の操作が可能になります。攻撃は自動化ツールで無差別に行われるため、「うちは小さいサイトだから狙われない」は通用しません。
実被害の傾向
国内でも、ECサイトや会員制サイトからの個人情報・カード情報の漏えい事故の原因として繰り返し報告されています。漏えいが起きると、被害者への通知・補償、カード会社・決済代行会社への報告、サイトの長期停止、信頼の毀損と、事業への影響が長期化しやすいのが特徴です。古いCMSやカートシステム、保守が止まったWebアプリケーションで被害が起きやすい傾向があります。
対策
- プレースホルダ(バインド機構)の利用:SQL文と入力値を分離する実装が根本対策。
- ソフトウェアの更新:CMS・プラグイン・フレームワークの既知の脆弱性を放置しない。
- WAFの導入:SQLインジェクションを狙う不正なリクエストパターンを、サイトに届く前に検知・遮断する。根本対策までの時間稼ぎとしても有効。
- 定期的な脆弱性診断:外部の視点で、攻撃者より先に弱点を見つける。
いま自分のサイトがどうなっているかは、Webサイトの脆弱性の確認方法の手順で確認できます。
サイトドックでの扱い
月次の定期診断(能動診断)では、世界中で共有されている既知の脆弱性パターン(nuclei)との照合や、Webアプリケーションの応答解析(OWASP ZAP)で、SQLインジェクションにつながる危険な露出や設定の不備を確認します。
WAFと自動修復(仮想パッチ)が、SQLインジェクションを狙う攻撃リクエストをサイトの通り道(エッジ)で検知・遮断します。サイトのプログラム改修は不要です。ただし、あらゆる攻撃の遮断を保証するものではなく、根本対策(アプリ改修)が必要な場合は診断結果で正直に明示します。
対策の実施と運用まで任せる場合の仕組み・料金はサイトドックのご案内をご覧ください。
よくある質問
SQLインジェクションはWAFで防げますか?
自分のサイトがSQLインジェクションに弱いか、どうすれば分かりますか?
小規模なサイトでも狙われますか?
このページの要点
- SQLインジェクションは、入力欄に不正なSQL断片を送り込みデータベースを操作する攻撃。個人情報漏えい事故の代表的な原因
- 根本対策はプレースホルダの利用とソフトウェア更新。WAFは攻撃リクエストを手前で遮断する多層防御
- 攻撃は自動化された無差別スキャンで行われ、サイト規模は関係ない
- サイトドックは月次の定期診断で危険な露出を確認し、WAF・自動修復(仮想パッチ)でエッジ遮断。治せない項目は正直に明示
対策の実施と運用まで、まとめて任せるなら
サイトドックは、月次の定期診断で弱点を継続的に見つけ、エッジで治せるものはその場で自動修復する統合型セキュリティサービスです。実施した対策は毎月のレポート(PDF)でお届けします。