WrdPress のセキュリティ強化方法

マトリックス系の画像w

WordPress で作られたサイトを見回すと、結構セキュリティに無関心なように見えるサイトがちょこちょこと見られる。

なので、初心者でも簡単にできる WrdPress のセキュリティ強化方法を書いておく。

wp-config.php を見えなくする

wp-config.php は MySQL のユーザー名とパスワードが書かれているので、特に共有サーバーを利用してる場合はやった方が良い。

万が一、共有サーバーで共有してる人に MySQL のユーザー名とパスワードが漏れると、DB の中身を見られたりイタズラされたりする可能性がある。

内部からのアクセス禁止

権限(パーミッション)を 400 にするのが良い。

400 ってのは「所有者のみが読み込みできる」って意味。

ただし、サーバーの設定によっては 404 や 440 じゃないと動作しない場合もあるので、その時は環境によって修正。

また、「所有者であっても読み込みしかできない」って意味でもあるので、
wp-config.php を書き換える時は、600 に変更する必要がある

外部からのアクセス禁止

.htaccess に以下を記述

<files wp-config.php>
	order allow,deny
	deny from all
</files>

wp-config.php は外部から見る必要のないファイルなので、deny from all で外部からのアクセスを一切禁止する。

ログインページを簡単には見えなくする

ログインページの URL 変更

↓ このページに書かれてる方法で OK

当方では、ログインページの .php って拡張子が気に食わんので、以下のようにしてログインページをディレクトリにしてる。

構造

ログインページをディレクトリにする

以下、index.php と functions.php。
↓ この部分は、何かテキトーな文字列に変更。

  • ログインページのディレクトリ名
  • nanikashira_no_keyword
  • LOGIN_PAGE_DEFINE

index.php

<?php
define( 'LOGIN_PAGE_DEFINE', hash( 'sha512', 'nanikashira_no_keyword' ) );
require_once '../wp-login.php';

functions.php

define( 'NEW_LOGIN_PAGE', 'ログインページのディレクトリ名' );
add_action( 'login_init', function() {
	if( !defined( 'LOGIN_PAGE_DEFINE' ) || hash( 'sha512', 'nanikashira_no_keyword' ) != LOGIN_PAGE_DEFINE ) {
		status_header( 403 );
		exit;
	}
});

add_filter( 'site_url', function( $url, $path, $scheme, $blog ) {
	$len = 0 - strlen( NEW_LOGIN_PAGE );
	$uri = rtrim( str_replace( '?' . $_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI'] ), '/' );
	if(
		$path === 'wp-login.php' &&
		( is_user_logged_in() === true || substr( $uri, $len ) === NEW_LOGIN_PAGE )
	) {
		$url = str_replace( 'wp-login.php', NEW_LOGIN_PAGE . '/', $url );
	}
	return $url;
}, 10, 4 );

add_filter( 'wp_redirect', function( $location, $status ) {
	if( stripos( $_SERVER['REQUEST_URI'], NEW_LOGIN_PAGE ) !== false ) {
		$location = str_replace( 'wp-login.php', '', $location );
	}
	return $location;
}, 10, 2 );

メタ情報ウィジェットを使わない

社内など閉じた環境で WordPress を共有するなら良いが、ネット上で公開してる WordPress で ↓ こいつを貼るのはアカン。

メタ情報のウィジェット

ユーザー名を公開しない

ログイン画面は「ユーザー名」と「パスワード」の2つで難解にするもの。
わざわざ「ユーザー名」を公開してログインのためのヒントを攻撃者に教える必要はない。

ブログ上での表示はニックネームにする

↓ とりあえず、ブログ上で見せる名前はニックネームに変更する。

ブログ上で表示するユーザー名を変更する画面

著者名のリンク先を変える

WordPress のデフォルト状態だと、著者名のリンクにユーザー名が含まれる。
なので、著者名のリンク先の URL は変更した方が良い。

ぶっちゃけ非表示にしてしまえばよいのだが、テーマによって hentry や schema.org で著者名を検索エンジンに伝えているので SEO 的には 著者名は表示した方がよい。

テーマによって、変更方法はまちまちだが、当方で作成してるテーマ Luxeritas の場合は、↓ ここで変更できる。

外観カスタマイズ -> 投稿者名の表示

Luxeritas の投稿者名変更画面

その他

やたら滅多にプラグインやテーマをインストールしない

1個でも脆弱性が見つかればアウト。

WordPress を常に最新の状態にする

当たり前。
これまでにも WordPress 本体に脆弱性が見つかったことが何度かあるので、常に最新にしておく。

ファイル操作は FTP ではなく SFTP、SSH 等で

通信経路をスニファリングされても、暗号化されてれば OK。

パスワードはとにかく難しく

WordPress に限らずパスワードと名のつくものは、とにかく難解、難読にする。

WordPress

Posted by るな