【WordPress】常時SSLサイト(https)で「安全でない」と言われた場合の対処法

恐怖!!SSL崩れの烙印―知らぬ間に蝕まれているサイト

WordPressで作成した常時SSLサイト(https://~で始まるサイト)で、いつの間にかアドレスバーの暗号化アイコンにグレーのビックリマークが付いてた!(ブラウザ環境:Firefox)
通常の暗号化アイコンと問題のアイコン

アイコンをクリックしてみると「このページの一部が安全でないためFirefoxがブロックしました。」と言われる。
このページの一部が安全でないためFirefoxがブロックしました。

常時SSLサイトで『一部が安全でない』とブロックされる原因

この状態は、「WordPressサイトを常時SSL化した時の修正箇所まとめ」の記事でも触れた通り、このページ内に『http://』で始まるコード(HTTP通信部分)が残っているということ。
ソースコードを「http://」で検索すればすぐに発見できる。

しかし、今回見つかったのはwp_head()wp_footer()」で出力される部分だった。
さらに言うと特定のプラグイン(今回はJetpack)を有効化したら入るインクルードファイルが原因だと分かった。

Jetpackの連携でつまづき、連携時に常時SSLを一旦解除→連携→再度常時SSL化というプロセスを経たサイトだったため、内部の値が混在してしまったのか?

詳細原因は不明だが、このままだと気持ちが悪い。
かと言ってプラグインのコードを解析するのも骨が折れる。
ということで、今回は水際対策を行うことにした。

インクルードファイルが「http://」と「https://」で混在する場合の対策

wp_head()wp_footer()の出力結果で「http://」で始まる部分を「https://」に変換するようにテーマを修正する。

常時SSL対応 WordPressテーマの編集

まずは、wp_head()を使っている箇所(大多数のテーマはheader.php)を以下のように修正する。

修正前:
<?php wp_head(); ?>
修正後:
<?php
   ob_start();
   wp_head();
   $wp_head_contents = ob_get_clean();
   $wp_head_contents = str_replace('http://', 'https://', $wp_head_contents);
   echo($wp_head_contents); ?>

次に、wp_footer()を使っている箇所(大多数のテーマはfooter.phpを以下のように修正する。

修正前:
<?php wp_footer(); ?>
修正後:
<?php
   ob_start();
   wp_footer();
   $wp_footer_contents = ob_get_clean();
   $wp_footer_contents = str_replace('http://', 'https://', $wp_footer_contents);
   echo($wp_footer_contents); ?>

テーマの修正は以上。これでHTTPSとHTTPの混在が改善され、安全なサイトに戻る。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

「【WordPress】常時SSLサイト(https)で「安全でない」と言われた場合の対処法」への3件のフィードバック

  1. とあるサイトのweclart + SSL化でつまづきこちらのページにたどり着き助かりました。
    ただ、
    $wp_head_contents = str_replace(‘http://’, ‘https//’, $wp_head_contents);
    の ‘https//’ → ‘https://’ の間違いがありました。
    今後の方のためにもと思いコメントさせていただきました。

    1. > enyama 様
      コメント有難うございます。
      本記事がお役に立てたようで何よりです。

      脱字のご指摘も有難うございます。
      本文を修正させていただきました。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください