Web制作

簡単にできるWordPressのセキュリティ対策

WordPressはオープンソースソフトウェアで、無料で利用することができ、プラグインが豊富で機能の追加のしやすさや、カスタマイズ性の高さやコンテンツ管理のしやすさから、世界中のさまざまなwebサイトで利用されています。

そういった背景から、悪意のある者から狙われやすいため、セキュリティ対策を怠ることはたいへん危険です。

よくあるのが、ログイン試行を繰り返すブルートフォースアタックで、総当たりでパスワードをbotに入力させてログイン成功させるという攻撃です。デフォルトのWordPressでは、ユーザーIDが丸わかりです。ユーザーIDがわかるのであれば、あとわからないのがパスワードだけになります。

この記事では、WordPressのセキュリティを向上するかんたんな方法を紹介します。
人が作ったものなので、完璧なセキュリティ対策は存在しません。
少しでも脅威からWordPressサイトを守るために、やって損はありません。

心構え

  • 完璧なセキュリティ対策はない。
  • パスワードは推測しにくいものにする。
  • WordPress本体やテーマやプラグインは常に最新バージョンを使う。
  • サーバのPHPのバージョンは最新バージョンを使う。

ログイン画面 wp-login.php にBasic認証を設定する

攻撃者はWordPressにログインするため、wp-login.phpにアクセスしブルートフォースアタックをします。ログイン試行されるたびにデータベースに負荷がかかります。
WordPressのログイン画面を開く前にBasic認証をかけることで、サーバへの負荷を減らします。Basic認証はたった2ファイルで設定できます。

  • .htaccess
  • .htpasswd

の2ファイルです。
.htpasswdは、認証のユーザIDとパスワードを記述したファイルです。
.htaccessはApacheサーバで、ディレクトリやファイル単位で制御することができるファイルです。
両ファイルとも、拡張子のみのファイルです。xxx.htaccessではありません。

.htpasswdを作成する

.htacces.htpasswdこちらのサイトでどちらも作成できます。
例えば ユーザIDがadminで、パスワードがtestだと.htpasswdは次のようになります。

admin:bH1c5/CIM8T82

※admin/testは例です。推測しやすいものには絶対にしないように。
作成した.htpasswdをwp-login.phpと同じ階層にアップします。

.htaccessを作成する

<Files wp-login.php>
AuthUserFile ここに.htpasswdへのフルパスを記入
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
</Files>

フルパスは.htpasswdまで含めます。
フルパスがわからない場合は、

<?php echo __FILE__; ?>

とだけ書いたphpファイルを作成し、htpasswdと同じ階層にアップし、ブラウザからアクセスするとスラッシュ始まりのパスが表示されます。それをコピー&ペーストし、後ろに.htpasswdと書けばOKです。
例えば

AuthUserFile /var/www/wordpress/.htpasswd

です。
書き終えたらwp-login.phpと同じ階層にアップします。
ブラウザからログイン画面にアクセスすると、Basic認証のダイアログが出てきます。作成した認証情報を入力して、ログインできれば成功です。

wp-config.phpと.htaccessのパーミッションを設定する

パーミッションの細かい説明は省きます。
簡単に説明すると、ファイルやディレクトリに対して誰が書き込んだり読み出したり実行したりできるかを細かく設定できる仕組みのことです。

wp-config.phpのパーミッション

wp-config.phpのパーミッションは、400または600に設定します。
400のほうが好ましいですが、サーバによっては400に設定できないので、その場合は600に設定します。

.htaccessのパーミッション

.htaccessのパーミッションは、604か606に設定します。

SiteGuard WP Pluginでログインページに画像認証を追加する

SiteGuard WP Pluginは株式会社ジェイピー・セキュアが開発しているWordPressのセキュリティプラグインです。
機能についてはこちらを参照。
Basic認証は、通信を傍受されると認証情報が漏えいするため、完全ではありません。もし突破されたことも踏まえ、ログイン画面でログインの手間を増やします。

ユーザIDを特定されないようにする

デフォルトのWordPressでは、サイトURL/?author=1でアクセスと、WordPressのユーザIDがわかってしまいます。攻撃者にとってIDがわかると、あとわからないのはパスワードだけなので危険です。
そういったアクセスはリダイレクトさせてユーザIDがわからないようにします。
テーマのfunctions.phpに下記を追記します。

function redirect_author_n() {
	if( preg_match ( '/author=([0-9]* )/i', $_SERVER['QUERY_STRING'] ) ) {
		wp_redirect( home_url() ); //サイトTOPページにリダイレクト
		exit;
	}
}
add_action( 'init', 'redirect_author_n' );

WordPressのセキュリティについてのまとめ

他にもセキュリティ対策はありますが、とりあえず対策をしておきたいといった場合には紹介した方法を試せばよいかと思います。