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 をインストールした方が幸せになれます。

続きを読む

「Google Maps Anywhere」から「Simple Map」へ移行

私の作ったプラグイン「Google Maps Anywhere」はメンテナンスを停止しています。
Google Maps API ver.2 までしか対応していないため、ver.3 に対応した「Simple Map」プラグインへの移行をお勧めします。
Simple Map の説明については、みやさんのブログを参考にしてください。
Simple Map – 超簡単&スマフォ対応のGoogle Map | firegoby

この二つのプラグインはショートコードで Google Maps を表示するという同機能を持っています。
パラメータに着いても互換性がありますが、ショートコードタグが異なりますので、過去記事に Google Maps Anywhere で埋め込まれたショートコードを書き換えてあげる必要があります。
続きを読む

コマンドラインから 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 をダウンロードして、上書きしてやればいいだけですが
# あと、他のプラグイン・テーマでも、このエラーが発する可能性がありますし
続きを読む

WordPress で二段階認証を可能にするプラグイン「魍魎」

魍魎WordPress で、メールまたは SMS でワンタイムパスワードを発行して二段階認証ができるようにするプラグイン「魍魎」を公開しました。
絡新婦」「狂骨」に続く、日本の妖怪シリーズ第三弾です。
現在、公式プラグインディレクトリに申請中ですので、気になる方は github のリポジトリから取得してください。
https://github.com/wokamoto/spirits-and-goblins

追記: 2013-06-24
WordPress 公式プラグインディレクトリでも公開しました。
Spirits and Goblins

インストールして有効化すると、通常のログイン後にユーザのメールアドレス宛に送信されたワンタイムパスワードを入力しないとダッシュボードに入れなくなります。
送信オプションとしてはメールと SMS (ショートメッセージ) が選択できます。
「ショートメッセージ」を使用するには Twilio への登録を行い、設定画面で「Twilio sid」「Twilio token」「Twilio phone number」を取得する必要があります。
KDDI 版 Twilio は、日本語化されててとても嬉しいのですが、残念ながらまだ SMS に対応していないので注意してください。早く対応してくれないかなー。
また、ユーザープロフィール画面に追加される「国」と「携帯電話番号」欄にも登録してください。
続きを読む

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
安定の直さんによる基調講演で幕開け、ぶれないっすな。
続きを読む