SQLインジェクション対策の完全ガイド|WordPressサイトをハッカーから守る方法
自社サイトへのSQLインジェクション攻撃が心配ではありませんか?この記事を読んでいるということは、すでに攻撃の深刻な被害についてご存じかもしれません。本記事では、SQLインジェクションを手軽に防ぐための実践的な方法を詳しく解説します。
SQLインジェクションを許すと、ハッカーはWordPressサイトを乗っ取り、管理権限を掌握できてしまいます。その結果、トラフィックの不正なリダイレクト、機密データの窃取、スパムリンクの注入、検索結果の改ざん、さらには違法商品の広告表示まで、さまざまな悪質な行為が行われる恐れがあります。この種の攻撃は、サイトとビジネスに取り返しのつかないダメージを与えかねません。
幸い、適切なセキュリティ対策を講じれば、SQLインジェクションは確実に防ぐことができます。本ガイドでは、SQLインジェクションの仕組みを深く掘り下げながら、WordPressサイトを守るための効果的な対策をわかりやすく紹介します。
SQLインジェクション攻撃とは?
WordPressサイトには通常、訪問者が情報を入力できる領域があります。たとえばサイト内検索バー、お問い合わせフォーム、ログインフォームなどです。
お問い合わせフォームでは、訪問者が氏名、電話番号、メールアドレスなどのデータを入力して送信します。
このデータはサイトのMySQLデータベースへ送られ、処理・保存されます。
ここで重要なのは、データベースに入る前にデータが適切に検証・無害化(サニタイズ)されるよう、入力フィールドを正しく設定することです。たとえば、お問い合わせフォームの脆弱性として挙げられるのは、「名前欄は英数字のみを受け付けるべきで、記号は受け付けないのが理想」という点です。もしサイトがあらゆるデータを無条件に受け入れると、ハッカーはこの隙を突いて、次のような悪意あるSQLクエリを挿入できます。
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
一度スクリプトがデータベースに保存されると、ハッカーはそれを実行してサイトの制御を奪えます。その後、SQLインジェクションを悪用してサイトに侵入し、顧客への詐欺行為や、訪問者をフィッシングサイトへ誘導するなどの悪事を働くのです。
つまり、入力フィールドからのデータをサニタイズしていないサイトは、SQLインジェクションの脆弱性を抱えているということになります。
SQLインジェクション攻撃はどう仕組まれるのか?
ハッカーは、セキュリティ対策が弱かったり脆弱性を抱えていたりするサイトを狙います。私たちの経験上、プラグインやテーマには脆弱性が発生しやすく、ハッカーもそれをよく知っています。彼らは常にインターネット上を巡回し、脆弱なプラグインやテーマを使っているサイトを探し回っているのです。
具体例で説明しましょう。Aさんが「Contact Form」というプラグインを使って、サイトのお問い合わせページにフォームを設置しているとします。このプラグインのバージョン2.4にSQLインジェクションの脆弱性が発見され、開発者が修正してバージョン2.4.1をリリースしたと仮定します。
リリース時、開発者はアップデート理由を公表するため、セキュリティ上の欠陥が周知のものとなります。つまり、ハッカーはContact Formプラグインのバージョン2.4に脆弱性があることを把握しているわけです。
ところがAさんは、対応する時間がないという理由で、数週間アップデートを先延ばしにしてしまいました。ここで問題が起きます。
ハッカーは脆弱性を突き止めると、プログラムや脆弱性スキャナーを使ってインターネットをクロールし、特定バージョンのプラグインやテーマを使用しているサイトを探し出します。
このケースでは、Contact Form 2.4を使っているサイトが標的となります。該当サイトを見つければ、ハッカーは正確な脆弱性を把握しているため、侵入は格段に容易になります。そしてSQLインジェクションの欠陥を悪用して、あなたのサイトに侵入してくるのです。
SQLインジェクションの種類
ハッカーが使うSQLインジェクションには、主に2つのタイプがあります。
1. クラシック型(通常の)SQLインジェクション – ウェブサイトにアクセスすると、ブラウザ(ChromeやFirefoxなど)はコンテンツの表示を求めてサーバーにHTTPリクエストを送ります。ウェブサーバーはサイトのデータベースからコンテンツを取得し、ブラウザへ返送します。これがウェブサイトのフロントエンドが表示される仕組みです。
さて、サイトのデータベースには、顧客情報、決済情報、ユーザー名とパスワードといった機密データを含む、あらゆるデータが格納されています。データベースはフロントエンド表示用のデータだけを返すよう設定されているべきで、その他の機密データは厳重に保護される必要があります。しかし、こうしたアプリケーションレベルのセキュリティチェックが整っていないと、ハッカーに付け入られることになります。
クラシック型SQLインジェクション攻撃では、ハッカーがデータベースへ悪意あるリクエストを送り、自分のブラウザへデータを引き出します。特に、サイトのログイン認証情報などの機密情報をクエリ文字列で要求するのが特徴です。この情報が保護されていなければ、ハッカーの手に渡ってしまいます。こうしてログイン情報を入手したハッカーは、サイトに侵入できるのです。また攻撃者は、プリペアドステートメント(準備済みステートメント)を利用して、同一または類似のデータベース命令を高効率で繰り返し実行する手法も使います。
2. ブラインドSQLインジェクション – こちらは、サイトの入力フィールド経由で悪意あるスクリプトを注入する手口です。スクリプトがデータベースに保存された後、それを実行して、サイトコンテンツの書き換えやデータベース全体の削除など、あらゆる破壊活動を行います。さらに、悪意あるスクリプトを使って管理者権限を奪取することも可能です。
どちらのシナリオも、サイトとビジネスに壊滅的な影響を及ぼしかねません。幸い、適切なセキュリティ対策と入力値検証を行えば、こうした攻撃は防げます。
SQLインジェクション攻撃を防ぐためのステップ
SQLインジェクション攻撃を防ぐには、まずサイトのセキュリティ診断を行うことが大切です。対策には大きく分けて2種類あります。ひとつは誰でも簡単にできる対策、もうひとつは技術的な知識が必要な対策です。
簡単にできる予防策
- セキュリティプラグインを導入する
- 信頼できるテーマとプラグインのみを使う
- 海賊版ソフトウェアを削除する
- 使用していないテーマとプラグインを削除する
- サイトを定期的に更新する
技術的な予防策
- デフォルトのデータベース接頭辞を変更する
- 入力フィールドとデータ送信を制御する
- WordPressサイトをハードニングする
それでは順番に見ていきましょう。
簡単にできるSQLインジェクション対策
1. セキュリティプラグインを導入する
サイトを保護するために最初に行うべきは、セキュリティプラグインの有効化です。WordPressセキュリティプラグインはサイトを常時監視し、ハッカーの侵入を防ぎます。
選択肢は豊富にありますが、提供機能を踏まえると、私たちが推奨するのはMalCareです。このプラグインは自動的にWebアプリケーションファイアウォール(WAF)を構築し、攻撃からサイトを防御します。ハッキングの試みは検知され、ブロックされます。
さらに、プラグインのセキュリティスキャナーが毎日サイトを徹底的にスキャンします。不審な動作や悪意あるアクティビティを検知すると、即座にアラートが届きます。Googleにサイトをブラックリスト登録されたり、ホスティング会社にサイトを停止されたりする前に、MalCareを使って素早く対処・修復できるのです。
2. サイトを定期的に更新する
前述のSQLインジェクションの例でも触れたように、開発者はソフトウェアにセキュリティ上の欠陥を見つけると修正し、セキュリティパッチを含む新バージョンをリリースします。サイトから脆弱性を取り除くには、新しいバージョンへ更新する必要があります。
週に1度、時間を確保してWordPressコア、テーマ、プラグインを更新することをおすすめします。
ただし、セキュリティアップデートがリリースされた場合は、待たずにすぐインストールしてください。
3. 信頼できるテーマとプラグインのみを使う
WordPressが最も人気のあるウェブサイト構築プラットフォームであるのは、手軽で低コストにできるプラグインとテーマの存在が一因です。しかし、膨大なテーマやプラグインの中からは慎重に選ぶ必要があります。有効インストール数、最終更新日、互換性が確認済みのバージョンなどの詳細を必ず確認しましょう。
ダウンロードはWordPress公式ディレクトリから行うのがおすすめです。それ以外のテーマやプラグインについては、信頼できるかどうかを十分に調査してください。一部のサードパーティ製テーマやプラグインは、ハッカーによって悪意を持って作成されている場合があるからです。単にコーディングが雑で、脆弱性を抱えているケースもあります。
4. 海賊版ソフトウェアを削除する
海賊版(ヌル化)テーマやプラグインは魅力的に見えます。プレミアム機能を無料で使えるからです。しかし残念ながら、これらにはマルウェアが仕込まれていることがほとんどです。海賊版ソフトウェアは、ハッカーがマルウェアを拡散するための格好の手段なのです。
インストールした瞬間にマルウェアが起動し、サイトに感染します。こうしたソフトウェアには手を出さないのが得策です。
5. 使用していないテーマとプラグインを削除する
プラグインをインストールしたまま何年も忘れていることは珍しくありません。しかし、この習慣はサイトをハッカーに晒すことにつながります。サイトにインストールされているプラグインやテーマが多いほど、脆弱性が発生する可能性が高まり、ハッカーに悪用されるリスクも増します。
実際に使用しているプラグインとテーマだけを残し、残りは削除してサイトをより安全にしましょう。併せて、既存のテーマやプラグインも定期的にスキャンすることをおすすめします。
技術的な予防策
これらの対策には、WordPressの内部構造に関する多少の知識が必要かもしれません。しかし今は何でもプラグインで解決できる時代です。複雑な作業を気にする必要はありません。簡単に実現できます!
1. デフォルトのデータベーステーブル接頭辞を変更する
WordPressサイトはファイルとデータベースで構成されています。データベースにはデフォルトで11個のテーブルがあり、それぞれに各種データや設定が格納されています。これらのテーブルには「wp_」という接頭辞が付いており、wp_options、wp_users、wp_meta のような名前になっています。
これらの名前はすべてのWordPressサイトで共通であり、ハッカーもそれを知っています。ハッカーはどのテーブルにどんなデータが保存されているかを把握しており、サイトに悪意あるスクリプトを注入する際、どこに保存されるかも見当がつきます。シンプルな手法でSQLコマンドを実行し、悪事を働けるのです。
しかしテーブル名を変更すれば、ハッカーがスクリプトの場所を特定するのを妨げられます。データベーステーブルへSQLコードを注入しようとしても、テーブル名が分からず失敗するわけです。
変更には「Change Table Prefix」や「Brozzme」のようなプラグインが利用できます。インストールして手順に従うだけで完了です。
wp-configファイルを編集して手動で行うことも可能ですが、注意が必要です。少しでもミスをするとデータベースエラーやサイトの不具合につながります。作業前に必ずバックアップを取りましょう。
- ホスティングアカウント > cPanel > ファイルマネージャーを開きます。
- public_html フォルダにアクセスし、wp-config ファイルを右クリックします。
- 「編集」を選択し、次のコードを探します。
“$table_prefix = ‘wp_’;” - 以下のように置き換えます。
“$table_prefix = ‘test_’;”
接頭辞は任意の文字列を選べます。ここでは例として「test_」を新しいデータベース名にしました。これで完了です。以降、ハッカーはSQLコマンドの実行場所を特定できなくなります。
2. 入力フィールドとデータ送信を制御する
サイト上のすべての入力フィールドを、特定の種類のデータのみを受け付けるよう設定できます。たとえば、氏名欄は英字のみを許可すべきです。数字を入力する理由がないからです。同様に、電話番号欄は数字のみを受け付けるようにします。
ユーザー入力を無害化する sanitize_text_field() 関数を活用しましょう。この入力値検証により、不正または危険な入力をブロックできます。
3. WordPressサイトをハードニングする
これは、SQLインジェクション攻撃からWordPressサイトを守るために取れる最重要施策のひとつです。ウェブサイトのハードニングとは何でしょうか?
WordPressサイトには、サイト運営を助ける多くの機能が備わっています。しかし、その大半は実際には使われていません。WordPress.orgは、使用しない機能を無効化または削除することを推奨しています。ハッカーが攻撃を試みる要素が減るため、攻撃を受ける可能性も下がるのです。
主なWordPressハードニング施策は以下の通りです。
- ファイルエディターを無効化する
- プラグイン・テーマのインストールを無効化する
- 二要素認証(2FA)を導入する
- ログイン試行回数を制限する
- WordPressセキュリティキーとソルトを変更する
- 不明なフォルダでのPHP実行をブロックする
これらの施策は、MalCareのようなプラグインを使えば、クリック操作だけで実装できます。
あるいは、WordPressハードニングガイドを参考に、手動で実施することも可能です。
以上で、SQLインジェクション攻撃の防止に関する解説は終わりです。このSQLインジェクション対策チートシートで紹介した施策を実装していれば、あなたのサイトは安全に保たれるでしょう。
まとめ
予防は治療に勝ると言います。SQLインジェクション攻撃は、不要なストレスと深刻な金銭的負担をもたらします。
本日ご紹介した対策の大部分は、プラグインを使えば簡単に実装できます。技術に自信がない方でも心配いりません。それでも十分に自衛できるのです!
これらの対策と併せて、MalCareの有効化を強くおすすめします。ファイアウォールが攻撃からサイトを能動的に防御し、毎日のスキャンでハッキングの試みやマルウェアの有無をチェックしてくれます。
サイトを監視し、悪者を締め出す「ウェブサイトの警備員」だと考えてください。サイトが保護されているという安心感を得られます。
MalCareセキュリティプラグインでハッキング攻撃を未然に防ぎましょう!
-
WordPress サイトからマルウェアを削除する方法 (マルウェア クリーンアップ ガイド)
Web サイトでハッキングや不審なアクティビティが疑われる場合、神経をすり減らす経験になる可能性があります。確実にわかるまで、理由も解決策も特定できません。 WordPress サイトからマルウェアを削除する方法について知りたい ? ご心配なく。WordPress からマルウェアを駆除し、原因を特定して、今後のトラブルを回避するお手伝いをいたします。 まず、ウェブサイトをスキャンします。 スキャンにより、ワードプレス サイトがマルウェアに感染しているかどうかが確認されます。マルウェア攻撃が時間内に特定されない場合、WordPress サイトに大混乱をもたらす可能性がある
-
ハッキングされた Web サイトを簡単に修復するには? (完全なガイド)
ウェブサイトがハッキングされていませんか ?私たちに連絡するほとんどのウェブサイト管理者は、ウェブサイトのリダイレクトやウェブサイトでのスパム ポップアップなどの症状を目にします。これがストレスになるのは当然です。ハッキングされた Web サイトを修正できます。 ウェブサイトのクリーニングに入る前に、あなたのウェブサイトがハッキングされていることを確認する必要があります。 セキュリティ プラグインを使用して Web サイトをスキャンし、Web サイトのハッキングを確認します。 ハッキングを確認すると、次のステップはずっと簡単になります。この記事では、Web サイト上のマルウェアを特定し