SQLインジェクションは、Webサイトのデータベースを狙うサイバー攻撃です。侵入されると、データの窃取や改ざん、削除などの深刻な被害を引き起されます。
したがって、WordPressサイトを運営する際は攻撃を防ぐための対策が必要です。
被害が及ぶのは、Webサイトだけではありません。サイトを通じた信頼性の失墜、法的な問題、ビジネスの停止に直結する可能性も高まります。
この記事では、WordPressのSQLインジェクション対策について詳しく解説します。
具体的な被害例を知りたい方、クロスサイトスクリプティング攻撃との違いを理解したい方も、ぜひ最後までお読みください。
目次
WordPressテーマ「ISSUE」
洗練された採用サイトが誰でも簡単に作成できる。SQLインジェクションとは
SQLインジェクションとは、Webサイトのセキュリティにおける脆弱性を悪用し、SQLコマンドをデータベースに不正に送り込んで実行させるサイバー攻撃です。ユーザーが入力する検索フォームやログイン画面、お問い合わせフォームなど、データベースと連携する部分で発生しやすい傾向があります。
攻撃者は入力欄に通常データではなく、データベースを操作するための特殊なSQLコマンドを挿入します。これにより、Webアプリケーションがそのコマンドを正規のSQLクエリの一部だと誤って解釈し、意図しない操作が実行されるわけです。
SQLインジェクション攻撃は、Webサイトの機能停止や信用失墜、法的な問題に直結します。したがって、きわめて危険な脆弱性として認識しなければいけません。
SQLインジェクション被害に
WordPressが遭いやすい理由
WordPressの市場シェアは、すべてのWebサイトの4割にも及びます。
参照元:W3Techs
いわば、世界中で幅広く使用されているCMSのため、SQLインジェクション攻撃をはじめとする、サイバー攻撃の標的になりやすい傾向です。
標的にされる要因のひとつは、WordPressがPHPとMySQL(またはMariaDB)などの一般的なWebアプリケーション開発スタックを採用している点です。これらの技術は広く普及しているため、攻撃者から脆弱性を見つけられやすく、攻撃手法に関する情報が豊富にあります。
また、WordPress本体のコードは厳重に管理されていますが、機能拡張にはさまざまなプラグインやテーマが利用される傾向です。これらのの中には、開発元のセキュリティ対策が不十分だったり、入力値のサニタイズ(無害化)処理やエスケープ処理が適切に行われていなかったりするケースも珍しくありません。
つまり、WordPressに脆弱なプラグインやテーマが導入されていると、そこからSQLインジェクション攻撃を受ける可能性が高まります。
また、コメント機能や検索機能など、ユーザーがデータを入力する機会が多いため、不適切な入力値の処理が攻撃の入り口となる場合もあるでしょう。
これらの要因により、WordPressはSQLインジェクション攻撃の標的となりやすいです。
WordPressのクロスサイトスクリプティング対策3選
WordPressのクロスサイトスクリプティング対策は、大きく分けると3つあります。
- エスケープ処理
- WAFの導入
- プリペアードステートメントの使用
それぞれ詳しく見ていきましょう。
エスケープ処理
SQLインジェクション対策には、ユーザーからの入力値に対する適切なエスケープ処理が必要です。
エスケープ処理とは、SQL文を組み立てる際に、ユーザーが入力したデータに含まれるSQLコマンドとして解釈されうる特殊な記号(例: シングルクォート、ダブルクォート、バックスラッシュなど)を、意味を持たない文字列に変換する処理です。
これにより、悪意のあるSQLコマンドが挿入されても、SQL文の一部として実行される事態を防げます。
WordPressでは、wpdb::prepare関数やesc_sql関数など、データベースクエリを安全に扱うための関数が用意されています。これらを適切に利用すれば、SQLインジェクションのリスクを低減できるでしょう。
WAFの導入
WordPressサイトをSQLインジェクション攻撃から保護するには、WAF(Web Application Firewall)の導入が有効です。
WAFはWebアプリケーションとインターネットの間に位置し、HTTP/HTTPS通信を監視して、SQLインジェクションやクロスサイトスクリプティングなどの脆弱性を狙った攻撃を検知しブロックする役割を果たします。
WordPress本体やプラグイン、テーマに未知の脆弱性があっても、攻撃パターンを検知して遮断するため、データベースへの不正アクセスやデータの改ざんを防ぐ効果が期待できます。
近年ではさまざまなサービスが提供されているため、サイトの規模に合わせて適切なものを検討しましょう。
プリペアードステートメントの使用
WordPressサイトのSQLインジェクション対策には、プリペアードステートメント(Prepared Statements)の使用も効果的です。
プリペアードステートメントとは、SQLクエリとユーザーから渡されるデータを完全に分離して扱うデータベース操作の仕組みです。
SQLクエリの構造をテンプレートとしてデータベースに渡し、ユーザーからの入力値をパラメータとしてバインドします。これにより、ユーザーからの入力値がSQLコマンドと解釈されないため、SQLインジェクション攻撃の根本的な防止が可能です。
WordPressでは、wpdb::prepare関数がプリペアードステートメントの機能を提供しています。データベースを操作するすべての箇所でこの関数を適用すると、強固なセキュリティを確立できるでしょう。
ただし、プリペアードステートメントの使用には、データベースの専門知識と経験が必要です。素人が操作すると不具合が生じる可能性があるため、実行したい場合はプロへの依頼を検討しましょう。
なお、データベースの扱いに慣れている方は、$wpdbクラスを使用して以下のように指定してください。
global $wpdb; $name = "xxxxx"; $email = "xxxxx@example.com"; $wpdb->query( $wpdb->prepare( "INSART INTO mytable (name, email) VALUES (%s,%s)", $name, $email ) );
WordPressのSQLインジェクション被害例
WordPressのSQLインジェクション被害例は、以下のとおりです。
- データベースにある個人情報が漏洩
- データベースの改ざん
- Webサイトの改ざん
それぞれ詳しく解説します。
データベースにある個人情報が漏洩
WordPressのSQLインジェクション攻撃による被害には、データベースに保存されている個人情報の漏洩があります。
攻撃者はSQLインジェクションを悪用し、以下の機密データを不正に読み取ります。
- ユーザーの氏名
- メールアドレス
- 電話番号
- 住所
- クレジットカード情報
- パスワード
これらの情報が外部に漏洩すると、顧客への信頼失墜はまず避けられません。法的な損害賠償責任が発生する可能性も高まるでしょう。
また、社会的信用の失墜だけでなく、経済的損失にも繋がりかねません。
データベースの改ざん
SQLインジェクションが成功すると、WordPressサイトのデータベースが不正に改ざんされる被害が発生します。
攻撃者はデータベース内の既存データを変更したり、新たな不正なデータを追加したりと、自由に書き換えや削除が可能です。
たとえば、商品情報が勝手に書き換えられる、注文データが不正に操作される、ユーザーのパスワードが変更されて正規ユーザーがログインできなくなるなどの事態が起こるでしょう。
同様の事例としては、2022年6月に起きた「矢野経済研究所における不正アクセス」が記憶に新しいです。
6月13日に弊社取引先から個人情報漏えいの可能性についてのお問い合わせがあり、外部セキュリティ会社の協力のもと原因・影響範囲等の調査を進めてきましたが、本日、6月6日に弊社サイト(www.yano.co.jp、www.yanoresearch.com)のサーバに外部からSQLインジェクションによる不正アクセスがあったことを確認しました。そのため、さらなる個人情報の漏えいを防止するため、同サイトと関連するサイトは現在閉鎖し外部ネットワークから遮断しております。また現時点で、個人情報の不正利用等の二次被害は確認されておりません。
引用:株式会社 矢野経済研究所
データベースの改ざんはWebサイトが正常に機能しなくなるほか、ビジネスの根幹に関わるデータの整合性を損ない、運用に多大な支障をきたす可能性が高まります。
Webサイトの改ざん
SQLインジェクションはデータベースを狙う攻撃ですが、結果としてWebサイト自体が改ざんされる可能性もあります。
攻撃者はデータベースを操作することで、WordPressの管理画面のログイン情報を窃取し、管理者としてサイトへのアクセスが可能です。権限を奪取されると、サイトのコンテンツ(投稿、ページなど)を自由に書き換えられたり、悪意のあるスクリプトやマルウェアを埋めこまれたりするリスクがあります。
誰もが知るサイトの改ざん事例は、意外にも多いです。
SQLインジェクションによってサイトが改ざんされると、不正なサイトに誘導されたり、マルウェアに感染したりする踏み台として利用される危険が生じるでしょう。
SQLインジェクションと
クロスサイトスクリプティングとの違い
WordPressサイトが攻撃される手法は、大きく分けると「クロスサイトスクリプティング(XSS)」と「SQLインジェクション」の2つです。
クロスサイトスクリプティング(XSS)はWebサイトの脆弱性を悪用し、サイト訪問者のWebブラウザ上でスクリプトを実行させる攻撃です。ユーザーのセッションハイジャックやCookieの窃取などがあります。
SQLインジェクションはWebサイトの脆弱性を悪用し、データベースでSQLコマンドを実行して攻撃する手法です。データベース内の機密情報(ユーザー情報、パスワードなど)の窃取、データベースの破壊・改ざんなどがあります。
端的にいうと、クロスサイトスクリプティングはブラウザ、SQLインジェクションはデータベースを攻撃する手法です。
まとめ
WordPressのSQLインジェクション対策は、エスケープ処理やWAFの導入、プリペアードステートメントの使用が有効です。
特にWAFを導入すると、Webアプリケーション層での攻撃を幅広く防いでくれるだけでなく、データベースへの不正アクセスの抑制もできるため、サイト全体のセキュリティレベルを向上させられます。
運営するWordPressサイトの規模や状況に合わせて、最適な対策を検討してください。
WordPressテーマ集
コメント