WrdPress のセキュリティ強化方法
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 の場合は、↓ ここで変更できる。
外観カスタマイズ -> 投稿者名の表示
その他
やたら滅多にプラグインやテーマをインストールしない
1個でも脆弱性が見つかればアウト。
WordPress を常に最新の状態にする
当たり前。
これまでにも WordPress 本体に脆弱性が見つかったことが何度かあるので、常に最新にしておく。
ファイル操作は FTP ではなく SFTP、SSH 等で
通信経路をスニファリングされても、暗号化されてれば OK。
パスワードはとにかく難しく
WordPress に限らずパスワードと名のつくものは、とにかく難解、難読にする。
ディスカッション
コメント一覧
るなさん
いつもお世話になっております。
私のブログ6つでLuxeritas使わせて頂いております。
感謝の気持ちを述べさせて頂きます。
私はよく、こういうの知りたいな~。
一応ネットに情報見つけた。
でも今一信用出来ないなあ。
るなさんの記事とかなら安心なんだけど。
そんな要望出したら失礼かもだし・・・
なんて思ってると、
今回みたいにいつの間にかアップされてたりして本当助かります。
まじ尊敬します。
文章もわかりやすいし読みやすいです。
本当Luxeritasがあってよかったです。
るなさんのおかげで、
私のような無知者でもいい感じにWordPressが使えます。
これからも遠くからリスペクトしてます(。・人・`。))
ありがとうございます ヽ(´ー`)ノ