こんにちは。設定関連大好きっ子です。
そこまで厳密なことはやっていないのですが、そこそこ気をつけているほうです。
WordPressを構築する時にやっておいたほうが良い
セキュリティ設定の一部を書き出してみます。
- 01.wp-config.phpのアクセス保護
- 02.ユーザにadminを使用しない
- 03.robots.txtに「wp-」のつくフォルダを除外記述する
- 04.WordPressバージョン情報を非表示にする
- 05.ログイン画面のエラーを非表示にする
- 06.踏み台対策
- 07.ログインに失敗したIPアドレスを拒否(要プラグイン)
- 08.ログイン履歴を記録する(要プラグイン)
01.wp-config.phpのアクセス保護
.htaccessを使用してwp-config.phpへのアクセスを拒否します。
<files wp-config.php>
Order deny,allow
deny from all
</files>
02.ユーザにadminを使用しない
気休めといえばそうなってしまいますが、ログイン試行対策です。
ID:1を使用しないようにすると尚良いと思います。
03.robots.txtに「wp-」のつくフォルダを除外記述する
robots.txtというファイルを作成し、下記のコードを追加するだけ。
User-Agent: *
Disallow: /wp-*
robots.txtの仕様上、ルートディレクトリ直下に置かなければなりません。
例えば、http://domain.com/なら、http://domain.com/robots.txtになるように。
サブディレクトリの場合でもこれは同様です。
つまり、レンタルサーバ等でサブディレクトリ以降の権限しかない場合はこの設定はできない模様。
http://domain.com/でWordPressを表示させるけど、
WordPressモジュールはhttp://domain.com/wp/にありますよという場合。
これは非常に難しい問題で、WordPressには仮想robots.txtが存在しており、
ルートディレクトリ直下に置いても、wpフォルダ直下に置いても
WordPressの仮想robots.txtの設定が優先されてしまう(古いバージョンのみかも)。
この対策は今のところプラグインで更に上書きするという力技しか思い浮かびません。
新しいバージョンだと修正されてるかも。
04.WordPressバージョン情報を非表示にする
これも正直気休めです。
WordPressの脆弱性を突くような人はソース表示なんておそらくしません。
わたしならしません。
でもゴミとりのために毎回とります。
remove_action('wp_head','wp_generator');
05.ログイン画面のエラーを非表示にする
WordPressでは、ログイン画面で間違った情報を入力した際、
入力したIDが存在しない場合、
「無効なユーザー名です。」
入力したIDが存在するが、パスワードが違う場合
「ユーザー名 admin のパスワードが間違っています。」
という文言になり、adminは存在するということが第三者に分かってしまいます。
add_filter('login_errors', create_function('$a', 'return null;'));
06.踏み台対策
DoSの踏み台対策です。XML-RPCを無効にするので、
付随する機能(iPhoneのWordPressアプリ・ピンバック機能)は使用できなくなります。
add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping');
function remove_xmlrpc_pingback_ping($methods)
{
unset($methods['pingback.ping']);
return $methods;
}
07.ログインに失敗したIPアドレスを拒否(要プラグイン)
「Login LockDown」では、ログインに失敗したIPアドレスをログイン拒否します。
試行回数、拒否時間の設定ができます。
08.ログイン履歴を記録する(要プラグイン)
「Crazy Bone(狂骨)」では、ログイン履歴を記録します。
不正アクセスの監視が行なえます。