【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://」に変換するようにテーマを修正する。

元ネタはこちら
WordPressでhttps通信時に、混在アクティブコンテンツの読み込みをブロックしましたとエラー表示される(CONETA.JP)

まずは、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に触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のSEを経て、独立。 ここ数年はWEB以外の仕事をしていたため、割と本気で勉強中。

コメントを残す

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