Blog スタッフブログ

oEmbedの影響でWordPressサイトにBasic認証が表示される件

Category | Blog
/ 4,188views

こんにちは。
エンジニアの松村です。

平成最後のブログとなりました。
目立った予定も特に無いまま、10連休を迎えようとしています。
連休中に備え、事務所の観葉植物に自動給水器をセットしたのですが、正しく機能してくれるのか結構不安です。

さて、今回のブログです。
WordPressサイトで、管理画面の手前(wp-admin)にBasic認証を設定した場合に、サイト内でも認証画面が表示されてしまうといった問題がありました。
その発生条件と解決方法についてご説明させていただきます。
それでは早速参りましょう。

Table of contents

  1. 発生条件
  2. 原因について
  3. 解決方法
  4. おわりに

発生条件

調べてみたところ、この問題は以下の条件で発生するようです。

  • /wp-admin にBasic認証をかけている
  • ビジュアルエディタに自サイト(トップ・アーカイブを除く)のURLを貼り付けている

この条件が揃った時に、ビジュアルエディタで作成したページを表示すると、Basic認証が表示されます。

原因について

原因はWordPressのoEmbed機能でした。
バージョン4.4から標準搭載されている機能で、ビジュアルエディタ内にoEmbedに対応したURLを貼り付けると埋め込み表示に変換されます。


※変換前

※変換後(URL貼り付けるとこの様に変換されます)

URLから自動生成される埋め込みには、タイトル・本文・サイト名などが表示されます。

そして、サイト名の左にあるWordPressのロゴマーク。
この画像のパスを見ると「/wp-admin/images/w-logo-blue.png」となっており、wp-admin以下にあるロゴマークを読み込む事になります。
そのため、wp-adminにBasic認証をかけており、oEmbed機能を利用したページを表示する際にBasic認証が表示されるのです。

※oEmbed機能の無効化について

oEmbed機能自体、テーマのfunctions.phpに以下のコード追加で無効に出来ると言われています。

remove_action('wp_head','rest_output_link_wp_head');
remove_action('wp_head','wp_oembed_add_discovery_links');
remove_action('wp_head','wp_oembed_add_host_js');

しかし、サイトでの表示上は無効化されるものの、検証ツールのネットワークパネルを見るとしっかりロゴを読み込もうとしている事がわかります。


※Basic認証の影響で画像が読み込めず、 pending(保留)状態

これにより無効化設定をしていても、Basic認証が表示されるパターンが発生しています。

解決方法

解決方法は2つあります。
状況に応じてお好みでお選びください。

プラグインで対応する

Disable Embedsというプラグインにより、機能を完全に無効化できます。
特に設定も必要無く、インストール後に有効化するだけです。
管理画面 > プラグイン新規追加画面から「Disable Embeds」で検索か、下記リンクよりダウンロードいただけます。

.htaccessで対応する

プラグイン導入に抵抗のある方は.htaccessでの対応をおすすめします。
.htaccessに以下の記述を追加するだけです。

<Files w-logo-blue.png>
	Satisfy any
	allow from all
</Files>

これにより、w-logo-blue.pngに対するBasic認証を解除する事が出来ます。

おわりに

何故この階層にロゴ画像が置かれてるのかというのはさておき、セキュリティの為にwp-adminにBasic認証をかけているケースは少なくないと思います。
oEmbedのために認証を外すわけにはいかないので、その対策をご紹介させていただきました。
放っておくとユーザビリティを損なう事になるので、いずれかの対策をおすすめします。

それでは今回は以上となります。
最後までご覧いただきありがとうございました。

Category | Blog
Author | Taku Matsumura / 4,188views

Company information

〒650-0024
神戸市中央区海岸通5 商船三井ビルディング4F

Contact us

WEBに関するお問い合わせは
078-977-8760 (10:00 - 18:00)