
最近はレンタルサーバでWordPress使ってブログやっている人が多くなってきたね

レンタルサーバ業者もWordPressが簡単に設置できるように工夫してくれているし、ハードルが下がったのかもしれないね
私自身もエックスサーバーの提供してくれている機能を使い、WordPressのインストールからドメインの設定、セキュリティ周りの設定まで、ブラウザ上で手順通りにぽちぽちやっていくだけでブログを開設できました。
ですがその後すぐにこれで大丈夫なんだっけと不安になり、WordPressのセキュリティ周りをいろいろ調べ、まさかのWordPress再インストールをしています。(まだ記事を書く前だったので…)
ということで今回は、WordPressのセキュリティ設定について、普通にやっているだけでは見落としがちなものを紹介したいと思います。
WordPressだけではなく、Webサーバの設定も混ざっていますが、安心してブログ執筆に専念するためにも最初に全部やってしまいましょう。
なお、私が利用しているサーバがエックスサーバーなので、それが前提になっています。
テーマを編集して設定しないといけないところもあるのですが、こちらは私が以前使っていたSimplicityと、現在使用しているCocoonの2つについて説明します。
色々やるべきことはあるのですが、
とりあえず二段階認証さえやっておけばOK!
だと思います。
サーバの設定

まずはサーバ側の設定から!
データベースは自分で作る

エックスサーバでは必要な情報を入力するだけで簡単にWordPressのインストールができるようになっています

正直データベースを作っているという認識すらないレベルだった…
エックスサーバのWebページにあるマニュアルも非常にわかりやすくて非常に便利なのですが、普通にWordPressをインストールしてしまうとデータベースの設定まわりにちょっとセキュリティ的に危うい箇所があります。
とはいっても動作には何の影響もないのですが、デフォルトのデータベース名とユーザ名が、「アカウント名_wp1」という簡単に推測できるデータベース名になってしまうのです。
これでは簡単に攻撃の対象になってしまいます。
対処は簡単で、WordPressのインストール前に自分でデータベースを作り、それを利用すれば良いだけです。
そのやり方もエックスサーバのWebページ上のマニュアルに記載されています。
この設定を後から変えるのはちょっと大変なので、最初の構築時に設定しておくことをお勧めします。
後から変える場合
後から変える場合は、ちょっと大変です。
特にデータベースの名前自体を変えるのは手間がかかるので、比較的やりやすいユーザ名およびパスワードの複雑化をやっておきましょう。
- エックスサーバのサーバパネルにログイン
- 左側の設定対象のドメインでブログのドメインを選択
- データベースのMySQLを選択
- MySQLユーザ追加から新しいユーザを作成(複雑なユーザ名にする!)
- MySQL一覧を選択
- ブログで使っているデータベースのアクセス権を4で作成したユーザに追加する
- FTPでログインして「ドメイン\public_html\wp_config.php」を編集する。
/** MySQL データベースのユーザー名 */ define('DB_USER', 'ここに新しいユーザ名を入れる'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', 'ここに新しいユーザのパスワードを入れる');
SSLを導入する

SSL?

通信の暗号化方式で、簡単に言うとブログのアドレスをhttpからhttpsに変更すること!
この設定により、Webページとの通信が暗号化され、セキュリティを強化することができます。
むしろGoogleがhttpsじゃないと警告を出すくらいに当たり前の設定になっています。
設定の方法ですがこちらもエックスサーバのWebページ上のマニュアルに記載されています。

丸投げばっかり

マニュアルが普通に分かりやすかったので…
あわせて、httpでアクセスしてきた場合にhttpsへ転送してあげる設定も必要です。
やり方は簡単で、エックスサーバのサーバパネルにログインして、設定対象のドメインでブログのドメインを選択します。
その後、ホームページの「.htaccess編集」を選んで、以下の記載を追加するだけです。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
WordPressの設定

次はWordPressの設定!
WordPressのユーザ名を変更する

これも「データベースは自分で作る」と同じで、デフォルト名を使わないようにするというだけです

確かに初期設定のユーザ「admin」じゃ誰でも分かっちゃうね…
特に「@」や「(」などの記号を使うと、後述の投稿者アーカイブでユーザ名を推測されにくくなるのでおすすめです。
変更の仕方ですが、既存のユーザ名を変えることはできないので、新しいユーザを作成して、元の「admin」は削除してしまいます。
WordPress管理画面の左部メニューから、ユーザ→ユーザ一覧と辿っていくとユーザの作成や削除ができます。
WordPressのニックネームを変更する
WordPressではログインユーザにニックネームをつけるのですが、まずこのニックネームをからなずログインユーザ名とは異なるものにしてください。

なぜに?

ブログ上でユーザ名ではなくニックネームを表示してあげることでユーザ名を隠せるんだ
ということで、ここで設定したニックネームを、ブログ上の表示名で選んであげる必要があります。
これをしないと、ブログ上のいたるところで、ニックネームではなくログインユーザ名が表示されることになります。
WordPressの管理ページで、「ユーザ→あなたのプロフィール」と辿ることで設定できます。
xmlrpc.php、wp-config.phpへのアクセスを拒否する

また謎の言葉が

確かにちょっと難しい、いろいろな機能を提供するプログラムのようなイメージかな
xmlrpc.php
xmlrpc.phpは外部からWordPressを操作するためのプログラムなのですが、これがいろいろと攻撃の対象となりやすいそうです。
xmlrpc.phpへのアクセスを拒否すると一部のプラグインやスマホアプリが使えなくなります
ですが、背に腹は代えられないのと、私は基本的にパソコンでブログを更新し、スマホは使っても下書きまでなのでWebからの更新で十分、ということで思い切ってアクセス拒否設定を行いました。
やり方はSSLの導入で説明した方法と同じで、エックスサーバのサーバパネルにログインして、ホームページの「.htaccess編集」を選んで、以下の記載を追加するだけです。
<files xmlrpc.php> order allow,deny deny from all </files>
wp-config.php
同じようにwp-config.phpへのアクセスも拒否してしまいましょう。
wp-config.phpの中にはデータベースへのアクセス情報など、他人に知られてはまずい情報がてんこ盛りです。(最初にデータベースの情報を記入したファイル)
xmlrpc.phpと同様、「.htaccess」に以下の通り記述します。
<files wp-config.php> order allow,deny deny from all </files>
ユーザ名を隠す

さっきニックネーム表示にしなかったっけ?

概ねそれで大丈夫なんだけど、他のところでもひょっこり顔を出すことがあるんだ
コメントと投稿者アーカイブ
まずはコメントと投稿者アーカイブの2か所でユーザ名を表示しない設定を行います。
投稿者アーカイブというのは投稿者ごとの記事を抽出する方法で、ブログのアドレスの後に「/author=1」と追記することで使用することができるのですが、なんとアドレスの中にユーザ名が出てくるのです…
大抵の場合はブログを複数のユーザが更新することもないでしょうし、この機能は止めてしまいましょう。
設定は、ちょっと面倒なのですが、使用しているテーマのfunctions.phpに以下の内容を追記します。
//comment-authorの出力停止 function remove_comment_author_class( $classes ) { foreach( $classes as $key => $class ) { if(strstr($class, "comment-author-")) { unset( $classes[$key] ); } } return $classes; } add_filter( 'comment_class' , 'remove_comment_author_class' );

上記の記載をfunctions.phpに加えることで、投稿者アーカイブを利用しようとした場合、トップページへ飛ばされるようになります。
投稿者アーカイブへのリンクを切る
さらに、私が使用していたテーマSimplicityや、現在使用しているCocoonでは、記事の下部に投稿者が記載され、投稿者アーカイブへのリンクが作成されます。
上記のfunctions.phpの修正で投稿者アーカイブは使えないためトップページへ戻るのですが、リンク先を見ることでユーザ名がばれてしまいます。
Simplicityの場合
Simplicityの場合はauthor-link.phpを修正することでリンクを切ることが可能です。
設定方法ですが、エックスサーバのファイルマネージャを使い、「ドメイン名/public_html/wp-content/themes/simplicity2/author-link.php」をいったんダウンロードします。
その後、ダウンロードしたファイルを
「ドメイン名/public_html/wp-content/themes/simplicity2-child/author-link.php」
にコピーし、22行目辺りを、以下の通り編集します。
//編集前: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ) ); ?>"><?php the_author(); ?></a> //編集後: <?php the_author(); ?>
これで、ニックネームからのリンクが消え、ユーザ名も見えなくなります。
Cocoonの場合
修正対象のファイルは違いますが、基本的にはSimplicityと同様です。
ファイルマネージャを使い、「ドメイン名/public_html/wp-content/themes/cocoon-master/footer-meta.php」をいったんダウンロードします。
その後、ダウンロードしたファイルを「ドメイン名/public_html/wp-content/themes/cocoon-child-master/footer-meta.php」にコピーし、25行目と30行目<a>タグをコメントにしてしまいます。
//編集前: <a href="<?php echo $url; ?>" class="author-link"> : : </a> //編集後: <!--<a href="<?php echo $url; ?>" class="author-link">--> : : <!--</a>-->
これで、ニックネームからのリンクが消え、ユーザ名も見えなくなります。
画像認証等の導入
ログインやコメントの送信時に画像認証を導入することで、BOTによる攻撃を防ぎます。
「SiteGuard」という有名なプラグインがあるので、これをインストールして設定してあげればOKです。
このプラグインでは他にも
などの機能があるので、設定しておくことをおすすめします。
一方、
については、ちょっといまいちなところがあるので、別途後述するプラグイン「Login rebuilder」を使用します。
SiteGuardでは後述するログイン画面のアドレスを変更することはできるのですが、管理画面のアドレスを変更することはできません。
さらに、ログインしていない状態で管理画面にアクセスすると自動的にログイン画面にリダイレクトされるのでログイン画面を隠す意味がありません…
ログイン画面を隠す

そもそもログイン画面隠せばユーザID知られても問題ないんじゃ…

そうとも言える…でも両方やった方が万が一の時に安心!
ログイン画面の仕組み
仕組みというほどではないのですが、初期設定では
の2つでログインを行うことができます。

違いは?

前者は管理画面のアドレスで、後者はログイン画面のアドレスなんだ
前者にアクセスすると、ログインされていない時は自動的に後者のログイン画面にリダイレクトされるため、同じように見えまてしまうのですが、実際は別物です。
ログイン画面の変更
ログイン画面には「Login rebuilder」というプラグインを使用します。
他のプラグインと同様に、プラグインの新規追加から「Login Rebuilder」を検索してインストール、有効化してあげればOKです。
管理画面のサイドバーから「設定⇒ログインページ」と辿ることで設定が可能です。
ここでログイン画面のアドレスを変えてあげればOKです。
ログインしていない時に管理画面へアクセスすると、「Login rebuilder」で設定した通りトップページに飛ぶ、もしくはエラーが表示されます。
この設定をした後、ブログの管理者は
することになります。
なお、「Login rebuilder」で投稿者アーカイブを無効化することができますが、前述(コメントと投稿者アーカイブ)のコメントにおけるユーザ名非表示は設定できないので、「Login rebuilder」では設定せず、前述の通りとしています。
二段階認証を導入する
GoogleやAmazon、Twitterや銀行のアプリなど、様々な場所で用いられている、ワンタイムパスワードによる二段階認証です。

正直これを導入していればユーザ名なんてばれていても関係ないんじゃないかというくらい強力なセキュリティ対策です
唯一の問題点は、WordPress用のアプリがワンタイムパスワードに対応していないため、それらが全く使えなくなるという点です。
いくつかプラグインがあるのですが、私は「Google Authenticator」というプラグインを使用しています。
プラグインをインストールしたら、自分のスマホにGoogleのアプリ「Google Authenticator」をインストールします。(プラグインと同じ名前ですが別物です…)
その後、WordPressの管理画面で、「ユーザ→あなたのプロフィール」と辿り、「Google Authenticator Settings」のActiveにチェックを入れます。
そのまま「Create new secret」、「Show/Hide QR Code」を押し、出てきたQRコードをアプリ「Google Authenticator」で読み取れば準備完了です。
これ以降、管理画面にログインする際に、今までのユーザ名とパスワードに加えて、スマホで表示されるワンタイムパスワードの入力が必要になります。
おわりに

長くなりましたがWordPress使用時に設定しておきたいセキュリティ対策は以上です

多いよ
ちょっと神経質すぎるかなという気もしますが、自分のサーバが乗っ取られてサイバー攻撃に使われたなんてことになったら目も当てられません。
大変かもしれませんが、できるだけのことはやって、安心してブログ運営に集中したいですよね。
今回紹介したような設定も大事ですが、あわせて以下のような、基本的なこともきちんとやっておきましょう。
特に記号(#や@など)をユーザ名、パスワードに加えることで格段にセキュリティレベルが上がります。
また、ブログで使う画像なんかにも、変に位置情報が残っていたりすると怖いので、プラグインを使って、余計な情報を削除すると良いでしょう。
画像の位置情報等の削除については以下の記事にまとめています。

難しい話が多かったかもしれませんが、これからWordPressをはじめる人、ちょっとセキュリティが気になってきた人は参考にしてもらえればうれしいです。
コメント