WordPressのログイン画面が崩れCSSが読み込まれていないように見える時

とあるサイト構築の際、とあるタイミングからWordpressのログイン画面が崩れ、HTMLのプレーンなテキストだけのページとなってしまったことがありました。

下記のような感じです。

入力フィールド、ログインボタンなどは表示され、IDとパスワードを入力すると通常通り管理画面へログインできます。
しかし、ログイン画面だけが崩れている、という状況です。

どこかで何かが読み込まれていないのは明らかですが、その対処法をこちらに。

SiteGuardプラグインを使っていませんか?

ブラウザのWebインスペクタなどを確認すると、javascriptの「/wp-admin/load-styles.php」が読み込めていない、とのエラーが表示されていました。

このファイルはログイン画面の表示装飾を制御しているもので、必ず読み込まれるものです。

通常であれば問題なく読み込まれるはずですが、このサイトはセキュリティプラグイン「SiteGuard」を使用していたため、通常のログインURLからオリジナルのログインURLへと変更していました。

SiteGuardは優秀なプラグインですが、何かの理由によりこれを読み込むことができなくなっているかと推察できます。

SiteGuardプラグインから除外パスを指定する

解決のために、まずSiteGuardの「管理ページアクセス制限」ページを開きます。
すると、「除外パス」指定テキストエリアが表示され、いくつかの項目が表示されます。

ここには説明文が記載されていますが、SiteGuardは/wp-admin/から始まるパスのファイルへのアクセスを制限しますが、ここに入力してあるファイルについては許可する、というものです。

管理ページ(/wp-admin/以降)に対する攻撃から防御するための機能です。ログインが行われていない接続元IPアドレスに対して、管理ページのアクセスを、404(Not Found)で返します。ログインすると、接続元IPアドレスが記録され、当該ページのアクセスを許可します。24時間以上ログインが行われない接続元IPアドレスは、順次削除されます。この機能を除外するURL(/wp-admin/以降)を指定することができます。

ここに「load-styles.php」を追加します。

すると、カスタムされたURLからアクセスした時でも、ログイン画面が通常通り整えられた状態で表示されます。


多くの場合、この「load-styles.php」が原因となっていると思われますが、プラグインを使用していなくても、

・サーバのWAF(ファイアーウォールではねられている)

・サーバにSiteGuardが設定されている

などといったケースもあるようです。

その場合はサーバコントロールパネルからでも除外パスまたはファイルが指定できるケースがあるようですので、チェックしてみてください。

wordpress利用者要注意。気づきにくい改ざんの実例と対策

このところ、wordpressサイトの改ざん、不正コードの埋め込みの対応に関する依頼をよく受けています。

症状としてはスパムが多くなった、遅く感じる、サーバ会社から報告があったなどがきっかけですが、共通する症状があり、意外と影響は深刻です。

お心当たりある方もない方も、管理されているサイトをチェックしてみていはいかがでしょうか。

症状は?

ご相談のサイトを調べてみると共通する特徴として、

  • アクセスすると表示スピードが異様に遅くなる
  • Chromeでアクセスすると、覚えのないダウンロードリンクが表示される
  • スパム審査サイトなどからでは判明しない
  • テーマなどサイト内のPHPファイルにコードが埋め込まれている
  • サーバはさくらやロリポップなど一般的な共用サーバ
  • 実際に埋め込まれたのは数カ月以上前

と言ったものがあります。サーバ会社から注意を受けると、サーバ内の他のサイトへの影響を考えて閉鎖される恐れもあるため心配ですね。

今回は、サイトにアクセスすると「font hasn’t found(フォントが見つかりません)」のメッセージが表示され、「 Chrome_Font.exe」などの不正ファイルをダウンロードさせるという手口です。

特にChromブラウザからアクセスがあった場合、影響を受けるとのことです。

PCの設定によっては自動的にダウンロードされる場合もあるようです。

Remove the BrowserMe.exe or Chrome_Font.exe Fleercivet Ad Clicker Trojan

EITest Nabbing Chrome Users with a “Chrome Font” Social Engineering Scheme

影響としては、

  • サイトの表示が異様に遅くなる時がある
  • 迷惑広告や不要なポップアップウィンドウが表示される
  • PCの速度が遅くなり、フリーズが発生したりする
  • 他のウィルスからの被害を受けやすくなる
  • IDやパスワードを盗まれる恐れがある

実際、とあるサイトではwordpressのユーザーが新規に作成され、勝手に投稿がされるという影響にまで及んでいました。
時期的に見て関連性があるかと思われます。

原因は?

FTPやwordpressのIDとパスワードがどこかからか漏れたことがまず考えられます。

または、wordpress自体やプラグインのセキュリティホールからの侵入です。メンテやアップデートが遅れがちの場合、気をつけなければいけないですね。

発見方法

WordPressはPHPファイルで構成されていますが、wordpressと関連のあるPHPファイルに下記のような不正なコードが埋め込まれていました。

一見何かの命令文やスクリプトに見えますが、こう言ったものがないかを確認して見てください。

上記のファイルは最上階層にあるwp-config.phpファイルですが、こう言った重要な設定の記載されているファイルにも書き込みがなされていました。

 

今回はPHPへ書き込みをするタイプのようで、データベースへはこのコードは埋め込まれていなかったがmySQLにまで影響を及ぼすタイプのものであれば、別の対応が必要です。

解決方法

  1. まずはサイト全体のダウンロードとバックアップ。
  2. 上記の不正コードを使い全体を検索し、コードの埋め込まれたファイルを検索。
  3. 「置き換え」を使って、不正コードを全て削除。
  4. 修正したファイルのアップロード。

もしバックアップしているデータがあれば、これをサーバにアップし上書きするだけでもいいかもしれません。

またもし確実にしたい場合は、wordpress.comから最新のwordpressファイルをダウンロードし、上書きすることができます。
その際、設定ファイルやプラグイン、テーマファイル、uploadフォルダ内は上書きしないように気をつけてください。

防御方法

#1.まずはPCのセキュリティを強固なものに。

FTP、mySQL、そしてwordpressのIDやパスワードといった設定情報保管方法も見直しましょう。

なんだかんだ言っても、パスワードを定期的に変更するフローを持っておくのはいいのかもしれません。

#2. サーバのセキュリティ設定を見直しましょう。

サーバから可能であれば、WAF(ファイアーウォール)の導入や、IPアドレス、ログインできるPCへの制限を行ないましょう。もちろんこれには運用上のポリシーとも関係するので、クライアントがいる場合は運用方法の見直しも含めることも忘れずに。

#3.FTPディレクトリ内のファイルの権限をしっかりと確認しよう。

設定情報の含まれている.htaccessやwp-config.phpは特に見直しましょう。

ロリポップの対策ページには、下記の情報が乗せられていました:

サイト改善への対策をお願いします

ディレクトリ、ファイルのパーミッションを以下の値での設定を推奨しております。

HTML・画像ファイル 604 rw—-r–
CGIの実行ファイル 700 rwx——
CGIのデータファイル 600 rw——-
.htaccessファイル 604 rw—-r–
ディレクトリ 705 rwx—r-x

パーミッションの設定を「777 (rwxrwxrwx)」や「666 (rw-rw-rw-)」などに設定されている場合は、「誰でも書き込める」設定となっているため、改ざんが行われる可能性がございます。ご確認の上、上記の値に変更してください。

-「.htaccess」ファイルが書き換えられる事例が多発いたしております。パーミッションが「604 (rw—-r–)」であるかご確認ください。
-「wp-config.php」のパーミッションは「400 (r——–)」に変更をお願いいたします。

#4. WordPressのセキュリティプラグインを入れて設定しよう。

主にログイン対策となりますが、セキュリティプラグインの導入も水際で防ぐことになります。

繰り返しとなりますが、これも運用方法とセットで。壁を一つ作ることは、日々の運用の手間などを一つ増やすことなので、実効性や使い方を考えましょう。

可能なクライアントのサイトにて、私は以下のプラグインを使っています:

SiteGuard WP Plugin – 管理画面への不正ログインを防ぐWordPressプラグイン

#5. wordpressのプラグインは、常に見直そう。

「便利そう」ということで使っていても、日々発見される脆弱性や危機に応じて更新や開発を行っていないプラグインも多々あります。

そういったプラグインから侵入されるケースもあるため、開発が1、2年行われていない場合は代替プラグインの導入をしましょう。


wordpressは、というよりウェブサイトもうほぼ保守運営ありきなのは事実です。

放置していて、後々面倒のタネになってしまうことも少なくありません。

保守というとどうしても後手になってしまいがちですが、せっかくなので全体をクリーンにする機会にしてみては。

サポートもしていますのでお気軽にご相談ください。

 

カラーミーショップに別サイトのwordpressからの更新情報を掲載する

国内ECサイトの雄、カラーミーショップはカスタマイズ特性が高いので便利ですが、独自タグで実現可能な範囲というルールがあります。

とあるECサイトに、関連ブログの投稿更新通知を表示させたい、と思ったのですが直にPHPを書き込んでも機能させられません。

そのため、投稿更新を読み込むファイルを別で作り、その外部ファイルをカラーミーショップのテンプレートに読み込む方法で実現することにしました。

RSSフィードにてwordpressの更新情報を読み込むファイルを作成する

別のwordpressブログの新着記事を一覧表示するためには、wordpressのRSS機能を使用します。ここでは投稿日時、またタイトルだけを表示させますが、RSSの仕様に基づいて画像やディスクリプションを読み込むことも可能です。

<?php
	$rssdata = simplexml_load_file("http://hoge.com/?feed=rss2");
 
	// 読み込み件数を決定する
	$num_of_data = 1;
 
	//出力内容の初期化
	$outdata = "";
 
	//設定した読み込み件数分だけ取得を繰り返す
	for ($i=0; $i<$num_of_data; $i++){ $entry = $rssdata->channel->item[$i]; //記事1個取得
		$date = date("Y.n.j", strtotime($entry->pubDate));
		$title = $entry->title; //タイトル取得
		$title = mb_convert_encoding($title, "EUC-JP", "auto");
		$link = $entry->link; //リンクURL取得
 
		//出力内容に日付けを入れる
		$outdata .= '

<a href="' . $link . '" title="' . $title . '" target="_blank">' . $date;
 
		//出力内容にリンク付きでタイトルを入れる
		$outdata .= '&nbsp;<span>' . $title . '</span></a>

';
	}
 
	echo '
<div>' . $outdata . '</div>

'; //実行結果を出力する

5行目にあるように、読み込み先の仕様に合わせて読み込み件数を指定します。
もし5件の表示の場合はここを5とします。
もしリスト形式のhtmlタグでコーディングしたい場合は、18行めのを<p>に変え、29行目の<li>を<ul>に変えると良いでしょう。

 

ポイントの一つは、wordpressは文字コードがUTF-8で運用しているケースがほとんどだと思いますが、カラーミーショップではEUC-JPが文字コードであるため、同ファイルをEUC-JPで保存します。

そのため、上記のコード内14行目にあるように、文字コードを指定する必要があります。

		$title = mb_convert_encoding($title, "EUC-JP", "auto"); //文字コードを指定

これをしなければ、文字化けした新着表示が表示されることになります。

このファイルを例えばnotify.phpなどのファイル名とし、文字コードをEUC-JPにて、ブログサイトの最上位階層に保存します。

外部ファイルをカラーミーショップに読み込む

これは、カラーミーショップはsmartyのタグを支えるため、そのfetch fileで上記にアップロードしてあるファイルを読み込んで表示させることにしました。

カラーミーショップのテンプレートの表示させたい位置に下記のコードを挿入します。

			<{fetch file="http://hoge.com/notify.php"}>

読み込むファイル名、またサーバの宛先は任意のものに変えてください。

これによってブログの更新情報がカラーミーショップに表示されるようになります。

なお、表示させる新着情報の装飾ですが、CSSはカラーミーショップ内のスタイルシートに記載すれば反映されます。

他のファイルの読み込みにも使えるかも?

この方法を使用すれば、カラーミーショップでは実現できない他の機能をAPIのようにして読み込むことが理論上できるということになりますが、セキュリティ的な観点から十分に注意を払いながら行いたいところです。

要注意!Custom Post Type UIのアップデートは影響あり

以前制作したWordPressサイトにて、「個別投稿ページが表示されなくなった」という事案が起きました。

トップページへのブログ新着一覧取得できているのですが、そこからのリンクは404、ページがありません状態。

テンプレートや設定を大きく変えてはいないため、要因を切り分けていくと、「Custom Post Type UI」というプラグインがアップデートされていることに気づきました。

Custom Post Type UIの設定画面も、デザインが大きく変わっていて、何か原因の香りがします。

プラグインもバックアップを取っていたため、この旧バージョンをアップロードすると、トラブルは解消され、すべてのページが閲覧できるようになりました。

Custom Post Type UIとは

Custom Post Type UI

WordPressの記事を投稿する場合、「投稿」か「固定ページ」から操作します。

Custom Post Type UIでは、この2種類以外の項目をwordpressの管理画面から新設することができ、非常に便利です。

Custom Post Type UI

このカスタム投稿はバージョン3.0あたりから登場したかと思いますが、function.phpにいちいち設定するのは面倒なため、管理画面からのUIで簡単に設置/変更できるため、重宝している利用者も多いプラグイン。

2015年2月以前に導入した方は、アップデートに要注意!

このCustom Post Type UIプラグインがメジャーアップデートを迎えたのは2015年2月、バージョンが「1.0.0」となり、特にUIデザインが大きく変わりました。

同時にプログラムの作りも変わったようで、カスタム投稿が作成されていないような状態となっています。

そのため、カスタム投稿の設定を更新する必要があります。

とはいえ、設定項目は管理画面から見ても入力されている状態となっているので、「更新」するだけです。

Custom Post Type UIの使い方

  1. CPT UI > Add/Edit Post Types > Edit Post Typeを開く
  2. カスタム投稿名を選択し「Select」をクリック
  3. 「Edit Post Type」をクリック

これで、最新のバージョンでも使えるようになります。

けっこうメジャーなプラグインのため、こういった影響の少ないアップデートとしていただけたらと願うところです。

【要管理】国内でWordPressが「イスラム国」攻撃の対象に

わたしも案件の半分以上が使用しているWordpress。イスラム国がWordpressのプラグイン「Fancybox for WordPress」の不具合を狙ってウェブサイト改ざんをしたという事例が発生していました。

「イスラム国」マーク、管理ソフトの不具合狙う(読売新聞2015年3月11日)

複数のインターネットサイトが改ざんされ、イスラム過激派組織「イスラム国」のものとみられるマークが表示される被害が相次いだ問題で、警察庁は11日、サイト管理者が利用するソフト「Fancybox for WordPress」の不具合が狙われ、ホームページ(HP)が書き換えられた可能性が高いと発表した。

ソフトを最新バージョンに更新すれば、被害には遭わないという。

警察庁によると、東京都内のフットサルクラブや兵庫県の西宮観光協会など八つのHPが被害に遭った。

プラグイン「Fancybox for WordPress」は投稿内のイメージやテキストを、エフェクトを使って表示させられるプラグイン。

Fancybox for WordPress

PCからネットを使う方であれば、ほとんどの方が見たことがあるようなエフェクト。導入が簡単なのでよく活用していました。

このブログ執筆時点でバージョン3.0.6となっていますが、3.0.3にてFixed Security issueとなっているので、それ以前のバージョンを使っている方はぜひアップデートしましょう。

プラグインのバグから、サイト乗っ取り

WordPressはオープンソースであり簡単であり、世界中で広く使われているだけに、攻撃の対象となり得ることはわかります。

そしてこういったメジャーな開発者のプラグインであっても(むしろだからこそ)、バグからサイトの乗っ取りにまで発展しうるということに、管理の大切さを感じます。

このプラグインだけだはないと思いますので、最低でもアップデート管理は徹底しましょう。