WordPress」タグアーカイブ

WordPress の管理画面を IP アドレスで制限する

WordPress の管理画面を IP アドレスで制限することは Brute Force Attack に対して有効です。
たとえば Nginx を使っている場合、以下のような設定で許可された IP アドレス以外からのログインを拒否することができます。

server {
  location /wp-admin {
    allow 192.168.0.1;
    deny all;
     :
  }

  location = /wp-admin/admin-ajax.php {
    allow all;
     :
  }
 
  location = /wp-login.php {
    allow 192.168.0.1;
    deny all;
     :
  }
}

また、IP アドレスによるログイン制限を行うプラグインもいくつかあるようです。

ただし、これらの方法だとリバースプロキシ配下のサーバの場合、期待した動作になりません。
# リバースプロキシサーバからは、実際にアクセスしてきたクライアントの IP アドレスは http ヘッダ X-Forwarded-For にセットされて来るため

そこで、簡単な PHP スクリプトを書いて対応しました。
続きを読む

HyperDB でお手軽に WP の MySQL サーバを複数分散

WordPress で DB サーバを分散処理したいとか思ったことありませんか?
以前、MariaDB Galera Cluster を使って DB サーバをクラスター構成にする方法を解説しました。
しかし、ここではもっと簡単に MySQL のマスター/スレーブ構成によるレプリケーション機能を使って読み込み先と書き込み先の DB を分ける手法について解説します。
Amazon RDS のリードレプリカ機能を使えば、WordPress のプラグイン(正確にはドロップイン)を設置して、ちょっと設定するだけですが、ここでは一応 MySQL でマスター/スレーブ構成のレプリケーションする方法についても解説します。

構成は、上のアイキャッチのような感じです。
続きを読む

Varying Vagrant Vagrants で WP 開発環境を手に入れる

Vagrant 流行ってますね。
ローカル環境での WordPress の開発でも使用できるので、どんどん使用しましょう。
WordPress のローカル環境で Vagrant を使うのであれば 10up 社が提供してくれている Varying Vagrant Vagrants (VVV) を利用するのが便利です。
インストールするには、以下の URL を参考にすれば良いんですが、ついでなんでやりかた書いておきます。
10up/varying-vagrant-vagrants

前提として git が使用できるようになってないと何もできません。
Mac 環境であれば Xcode 入れて、Homebrew 入れて brew install git して git をインストールしておきましょう。
インストール方法は、そこら中に書いてあるので、ここでは割愛します。
Xcode インストールしただけでも git が付属していますが、Xcode 同梱の git は ver.1.7.x系と古いので、brew から git をインストールした方が幸せになれます。

続きを読む

コマンドラインから WordPress を操作する wp-cli 初級編

WordPress 3.6.1 が出たので、記念に wp-cli の紹介。(なんの記念だ)
wp-cli は、WordPress への各種の操作(本体のインストール・アップデートから plugin、theme のインストール・アップデートまで、すべてのことが!)をコマンドラインから行えるようにするツールです。

# curl https://raw.github.com/wp-cli/wp-cli.github.com/master/installer.sh | bash

これだけで ~/.wp-cli/bin/wp というコマンドが使えるようになります。
wp-cli が正常にインストールできたか確認するには、以下のコマンドで確認できます。

# ~/.wp-cli/bin/wp --info
PHP binary:	/usr/bin/php
PHP version:	5.4.19
php.ini used:	/etc/php.ini
WP-CLI root:	/root/.wp-cli/vendor/wp-cli/wp-cli
WP-CLI config:	
WP-CLI version:	0.11.2

インストール後にディレクトリ名つけないで使えるように .bash_profile 等を修正して PATH を通してあげてください。

PATH=${PATH}:${HOME}/.wp-cli/bin

続きを読む

WordPress フィードで pre_get_posts の posts_per_page は使えない

タイトルで言い切ってますが
WordPress のフィードで表示件数をダッシュボードで入力された値では無く、他の値に変更しようとしてハマったのでシェア。

通常 WordPress で表示件数を変更する場合は、pre_get_posts アクションフックを使って以下のように posts_per_page オプションを指定してやります。
codex にも書いてあるので、これで安心のはずです。

<?php
function my_pre_get_posts( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_home() ) {
        // Display only 1 post for the original blog archive
        $query->set( 'posts_per_page', 1 );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts', 1 );

これをフィードの時にのみ変更しようとして、以下のようなコードを書いたけど、期待通りに表示件数が変更されませんでした。

<?php
function my_pre_get_posts_for_feed( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_feed() ) {
        // Display 50 posts for the feed
        $query->set( 'posts_per_page', 50 );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts_for_feed', 1 );

続きを読む

「Fatal error: Call-time pass-by-reference has been removed」の対処

PHP 5.4 にアップデートした際に古いバージョンの WP Multibyte Patch を使っていると、以下のようなエラーが表示されることがあります。

Fatal error: Call-time pass-by-reference has been removed in /path/to/wordpress/wp-content/plugins/wp-multibyte-patch/ext/ja/class.php on line 74

このエラーの対処法について説明します。

ちなみに最新バージョンの WP Multibyte Patch では、このエラーは発生しないのでアップデートすれば良いだけなのですが、「対処しないと WP のダッシュボードに入れないんよ」っていう人を想定して書いてます。
# まぁ、最新の WP Multibyte Patch をダウンロードして、上書きしてやればいいだけですが
# あと、他のプラグイン・テーマでも、このエラーが発する可能性がありますし
続きを読む

Brute force attack との戦い – その2

ログイン履歴を保存できるプラグイン「狂骨」をインストールした知人から、こんな話がありました。
「管理者アカウントを admin 以外にしていて、author リンクとかはサイトに一切表示していないのにそのアカウントへのアタックが観測されるんだけど

原因が良くわからなかったのですが WordCamp Kobe 2013 の懇親会での LT で謎が解けました。
要約すると
「WordPress では /?author={user_id} にアクセスすることで、著者アーカイブにリダイレクトされる。
 その URL からログインユーザ名を取得することが可能。
 通常最初に追加されるユーザのユーザ ID は 1 なので、攻撃者は /?author=1 に対してリクエストしてくる。」
ってことです。

そんなわけで、気持ち悪い人は以下のようなプラグインを使用して著者アーカイブのスラッグ自体を変更してあげましょう。

他の対処法としては、みやさんが作ったプラグイン「Force email login」でログインユーザ名ではなく、登録されたメールアドレスでログインするようにする方法も有効ですね。

以下に「Edit Author Slug」の設定方法を説明します。
続きを読む

WordCamp Kobe 2013 へ行ってきました

2013年6月15日に開催された WordCamp Kobe 2013 に行ってきました。
僕は、小賀さんと一緒に「AWSを利用したエンタープライズ向けWordPress環境の構築と運用」ってセッションで話してきました。
今回は、国内 WordCamp 連続出席記録を持つおでこんが居なくて残念。
おでこん、来てると思ってたよ
すいません、写真あんまり取ってないです。

2013-06-16-09.01.01-320x214.jpg
まずは、限定でチャリティ販売されていたレアシールをゲット。
これで僕もワードプレスマスターだぜ!

2013-06-15-10.38.55-320x214.jpg
安定の直さんによる基調講演で幕開け、ぶれないっすな。
続きを読む

WordPress サイトを静的 HTML に変換するプラグイン StaticPress

実は WordPress サイトを静的 HTML に変換するプラグイン StaticPress をリリースしていました。
ダウンロードは、WordPress 公式プラグインディレクトリからお願いします。
WordPress › StaticPress « WordPress Plugins

このプラグインを使用することで WordPress で作成されたサイトを丸ごと静的ファイルに変換することができます。
また、変換時にサイトのパーマリンク構造を変換することができるため、http://wp.example.com/ というオリジナルサイトを http://www.example.com/static/ というサイトとして公開するための html を作成することも可能です。
完全に静的ファイルを作成するため、コメントやサイト内検索・コンタクトフォームの設置などはできません。
それらについては Disqus や Facebook コメント、Google カスタムサーチ・Google フォームなどで代替するようにサイト設計してください。

残念ながら、現状では Windows 環境に対応できていません。
github でソースを公開しているので、修正して pull request 送ってくれたりすると私が喜びます。
https://github.com/megumiteam/staticpress

Facebook ページなんかもあるので、よろしければ「いいね!」してくださいね。
https://www.facebook.com/StaticPress

あと、私が在籍している digitalcube では higanworks と合同で AWS OpsWorks を利用した自動化ソリューションを提供するサービス Opsrock.in を開始しました。
そこでは、StaticPress で生成した HTML を OpsWorks の StaticWeb レイヤにデプロイするソリューション等も提供して行きますので、こちらもご参照ください。
StaticPress × OpsWorks

以下、簡単な使い方など
続きを読む

Brute force attack との戦い

先般リリースした WordPress プラグイン「Crazy Bone (狂骨)」で、ブルートフォースアタックのログを見て、もろもろ設定変更したので、メモ代わりに。

特徴として、非常に多くの IP アドレスからのアタックがあるため、ブラックリストでの IP アドレス制限は現実的ではありません。
IP アドレス制限を行うなら、ホワイトリストでの制限をかけないとですが、それをやると出先でブログを書こうとかするとメンドくさいです。
そこで、以下の対策を行いました。

  • 狙われやすいアカウント名でのログイン試行は、WordPress 読み込み前に拒否
  • ユーザーエージェントでの wp-login.php へのアクセス制限

続きを読む