インストールも簡単でレンタルブログよりも機能的なサイトが作れて、しかもカスタマイズできる「テーマ」や「プラグイン」も充実している、まさにいうことなしなサイト作成ツールであるWordPress。
ですが簡単故に潜む危険があるのをご存じですか?
未対策のまま使い続けているとしたら「このサイトを乗っ取ってください」と言っているようなものかもしれません。サイトが勝手に改変されたり乗っ取られたりする前に、簡単かつ最低限やっておきたいセキュリティ対策についていくつか紹介したいと思います。
WordPressをインストールしたら最初に確認・設定しておきたいセキュリティ対策
メールアドレスの確認と変更をする
WordPressはインストール初期画面(レンタルサーバーの自動インストールではサーバー上の項目設定画面等)で、サイトに使うメールアドレス(これを「管理者メールアドレス」と言います)と、最初に登録する管理者権限を持つユーザーのユーザー名を設定するようになっているのは、一度でもWordPressをインストールした方ならご存じでしょう。
そして、WordPressサイトのログイン画面では以下の2つを検証してログインできるようになっています
- メールアドレスまたはユーザー名
- 対応するパスワード
ユーザー名をインストール画面の例のまま「admin」にすることが危険だというのは、いろいろなサイトでも紹介されていますし、ユーザー名はそのユーザーが書いた投稿の一覧のURLにばっちり表示されてしまうのもご存じの方は多いでしょう。
しかし、初期設定画面で登録するメールアドレスは、サイト自体に設定するメールアドレスと最初に登録するユーザーのメールアドレスが共通になっていて、以下のような使用をすると簡単に漏洩してしまいます。
- フォームなどを使って問い合わせなどを受けるとき
- WordPress標準の送信方式ではなくSMTPを使ってメールを送信するとき
WordPressでは、メールアドレスが漏洩されないようにするために、初期状態でメールを送信すると、送信元メールアドレス(メールヘッダーも含む)が「wordpress@サイトのドメイン名」になるようになっていて、その状態では漏洩することはないのですが、上記の場合のほとんどが「管理者メールアドレス」が送信元メールアドレスになるようになっているため、漏洩が起こるのです。
個人的には「そもそも別のメールアドレスにしてインストールすれば何も問題ないのに..」と以前から思うところではありますが、恐らくWordPressをインストールしやすくする配慮としてメールアドレスが1つあればいいという利便性を担保したいということなのでしょう..。
「今特にフォームもなければSMTPなんか使ってメールを送信する予定ないから..」とそのままにしておくと、いざという時にメアドがただ漏れとなってしまう危険性がありますから、まずWordPressのインストールをしたら、「管理者メールアドレス」と「最初に登録したユーザーのメールアドレス」を別々のものへ変更しておきましょう。
「最初に登録したユーザーのメールアドレス」は全くサイトとは関係のないドメインのものにしておくと、更に類推されにくくなるでしょう
ニックネームは必ず設定する
記事の作者として表示される名前が「ユーザー名」になっているなんてセキュリティ意識ゼロ!と言わざるを得ません。WordPressの標準セキュリティ機能としてこれを別名にするための設定項目がありますから、必ず設定しましょう。
- ダッシュボードから「ユーザー」をクリック
- ユーザーの一覧から、ニックネームを設定するユーザー名の「編集」をクリック
- 出てくるプロフィールの中の「ニックネーム」に別名を入力
- その下の「ブログ上の表示名」で設定したニックネームを選択
- 「更新」をクリック
たったこれだけの手順で、表示上の作者名をユーザー名から別名に変更できますから、必ず行うようにしましょう。
ユーザー名でのログインを禁止する
ちらっと前述しましたが、そのユーザーが公開した投稿の一覧(作者ページ)を表示させると、URLの一部にバッチリユーザー名が表示されてしまいます。
また、多くのテーマでは投稿のタイトル下や一番下へ作者ページへのリンクがあり、それをマウスオーバーすることでもURLは分かりますから、そこから判別することも可能です。
WordPressにはこのURLを変更してしまうプラグインがありますが、WordPressの基本機能でもなく、WordPressの作者がリリースしているプラグインでもありませんから、日々更新されていくWordPressに対して、そのプラグインが永久に対応していってくれるのかというところに懸念が残りますから、個人的には避けた方がいいでしょう。
では、対策方法がないのかというとそうではありません。そもそもユーザー名でのログインではなく、メールアドレスでのログインのみを許可するようにすればいいのです。
これを行うには、前項のメールアドレスを別にする作業をした上で、以下のコードを有効化しているテーマ(子テーマ)のfunctions.php末尾へ追加する必要があります。
functions.phpは動作を指示する大切なファイルなので、一度も編集した経験のない方にはおすすめしません
/********** ログインをメールアドレスのみにする **********/
if ( !function_exists( 'hab_force_email_login' ) ){
function hab_force_email_login( $user, $username, $password ) {
//「ユーザー名またはメールアドレス」に入力された情報を email情報 としてユーザー検索
$user_data = get_user_by( 'email', $username );
if( !empty( $user_data ) ) {
//email情報からユーザーが見つかればログイン認証用の関数にデータを渡す
return wp_authenticate_username_password( null, $user_data->user_login, $password );
}
//emailでユーザー取得できなかった場合
return wp_authenticate_username_password( null, '___', $password );
}
}
add_filter('authenticate', 'hab_force_email_login', 20, 3);
コード追加後も、ログイン画面には「ユーザー名またはメールアドレス」と表示され、ログイン失敗時のメッセージもそのままですが、メールアドレスを使うということは貴殿のみが知っていればいいことなので、文言の変更は必要ない(わざわざヒントを与える必要はない)でしょう。
可能であれば、ログインして作業する場所を限定する
最後になりますが、個人的にはこれが究極の方法だと思います。考え方としては、ログインができないようにするのではなく、特定の場所以外からはログイン画面が表示できないようにするという措置です。
できれば..と書いたのは、以下の条件があるからです
- 会員制サイトなど多数の方がログインする機会があるサイトでは使えない
- ログインする拠点のグローバルIPアドレスが頻繁に変わる場合には使いにくい
2について、グローバルIPアドレスが頻繁に変わってしまう拠点であっても、都度設定の変更をご自身でできれば利用可能です
グローバルIPアドレスというのは、インターネットに接続するときに必ず付与されるアドレスで、今このページを見ている場所のグローバルIPアドレスはこちらのページ(外部サイト)などで確認できます。
この措置を行うには、サーバー内でWordPressがインストールされている場所にある「.htaccess」というファイルの先頭へ以下のコードを環境に合わせて変更した上で追記する必要があります。
「.htaccess」の編集はFTPクライアントツールを使う、レンタルサーバーのファイルマネージャーを使うかのいずれかになりますから、スキルがない場合には避けた方がいいでしょう。
WordPressの管理画面から「.htaccess」ファイルの編集ができる「WP Htaccess Editor」というプラグインを使う方法もありますが、グローバルIPアドレスが変わった時にログインできなくなってしまいますからおすすめしません
.htaccessファイル先頭へ追記するのは以下のコードです。コード中の〇〇の部分を接続する拠点のグローバルIPアドレスへ変更して追記します。
<FilesMatch "wp-login.php">
Order deny, allow
Deny from all
Allow from 〇〇〇.〇〇〇.〇〇〇.〇〇〇
</FilesMatch>
サーバーによっては、いずれかのコード500エラーが出ることがあります。エラーが出る場合には以下のコードを試してください
<Files wp-login.php>
order deny,allow
deny from all
allow from 〇〇〇.〇〇〇.〇〇〇.〇〇〇
</Files>
また、複数の拠点からのアクセスを許可する場合はコード中の
allow from 〇〇〇.〇〇〇.〇〇〇.〇〇〇
の部分を追加すればいくつでも許可できます。
ログイン画面からではないログイン情報の漏洩を防ぐ
ログイン情報の流出は、今まで紹介したようなログイン画面上での問題ではなく、機械的な作業によるものが実は多いです。
これは、WordPressの機能の1つである、メールなどによる投稿機能を悪用したもので、水面下で行われるため、発見が遅れることが多いです。
後述するログ取得プラグインを使うと、この機能を使ったログイン情報の取得を画策されていることも確認できます
対策としては、この機能を停止するほかありませんが、以下のコードをテーマ(子テーマ)のfunctions.phpへ追記することで簡単に停止することができます。
/***** XML-RPC通信を無効にする *****/
/* XML-RPC通信を無効にする */
add_filter( 'xmlrpc_enabled', '__return_false' );
/* X-Pingbackを無効にする */
function ha_disable_x_pingback( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
}
if(get_theme_mod( 'disable_xml_rpc' ) == true){
add_filter( 'wp_headers', 'ha_disable_x_pingback' );
}
停止後はご自身の使用環境で問題がないかの確認を行ってください
ログイン成功/失敗のログを取って確認する
不正かどうかはともかくとして、いつだれがどこからログインしたのかは把握しておく必要があるのですが、残念ながらWordPressには標準でログを取る機能がありませんから、以下のプラグインを使って履歴を取るようにするとよいでしょう。
対策を行ってしばらく稼働させ、不正の痕跡がないようなら停止しても構わないと思います
以上、WordPressをインストールしたら最初に確認・設定しておきたいセキュリティ対策(プラグインなし)でした。
ここからはおまけ情報を2つ紹介しておきます
おまけ WordPressが不正ログインされやすいのはなぜ?
WordPressはご存じの通り、世界でたくさん使われているCMS(サイト作成ツール)です。簡単にインストールできるし、プラグインの追加やテーマの変更なども簡単にできることが人気の要因なのですが、実はこれが非常に危険なんです。
なぜかというと、
簡単にできる=ドメイン(URL)が違うだけでファイルの構造も基本プログラムも一緒
だからです。
WordPressのサイトであることが分かってしまえば構造は全員が分かるので、不正な処理をしようと思えばできてしまうのです。
試しに、あなたのサイトの管理画面のURLは何ですか?
当然ながら「http://サイトのURL/wp-admin」ですよね?
正確には「http://サイトのURL/wp-admin/index.php」なのですが、/index.phpなしでも開くようになっています。
そして、ユーザーログイン画面は「http://サイトのURL/wp-login」ですね。そして、「wp-admin」にアクセスしてログインしていないことが分かると自動でログイン画面になる(リダイレクトされる)という機能もWordPressは持っています。便利ですね、でも・・・。
汎用のプログラムだから当然の話です。では、不正を行おうとする人はどういう行動をすると思いますか?そうです!いろいろなサイトで試しに「http://サイトのURL/wp-admin」へアクセスしてみるのです。それでログイン画面が出れはWordPressで作られたサイトだということがバレバレ!!となるのです。
ここまでで、WordPressを使わない方がいいの?と思われるかも知れませんね。
しかしそうではありません。WordPressに限らずメジャーなCMSやブログサービスなどでも同様のことが言えますから、特にWordPressが危ないというわけではないことも捕捉としてお伝えしておきます。

おまけ やらない方がいいと思われること
複雑なセキュリティ系プラグインは使用しない
WordPressにはいろいろなセキュリティ系のプラグインが配布されています。検索すると実にたくさん出てきて、中には「ここまでする?」という複雑な機能を持つものもあります。
これは私の体験も含まれる話ですが、こうしたセキュリティプラグインには大抵プラグイン削除を行う際に設定をデフォルト(プラグイン導入前の状態)へ戻す機能が備わっています。そしていざデフォルトに戻してプラグインを停止したはずが・・・ログインできない、ログイン画面が表示されない・・・という状態になることがあります。
ネット上のQ&Aサイトなどでも出てくるので、これでアクセス不能になったサイトがたくさんあるのだろうと想像できます。
環境によっては・・・という要素が強いのは確かですが、WordPressに限らず実生活でも「完全に元に戻す」ことは結構難しいと思いますから、できればこうしたプラグインの使用はやめた方がいいと思います。
任意で削除する場合でなくても、
- サーバーに何等かの不具合があって機能が停止した場合
- FTPで誤ってセキュリティプラグインのフォルダを削除してしまった場合
- 元に戻さずにプラグインを停止した場合
- プラグインそのものに不具合が起きた場合
など、不測の事態が起こらないとは限りませんので、やはり避けたほうが無難だと思います。
また、ページ中でも触れましたが、セキュリティ系に限らず、プラグインというのは以下の懸念がありますから、できる限り使用は避けた方がいいと個人的には考えます。
- プラグインがWordPressの更新に対応できず開発中止(放棄)されることがある
- プラグインの機能が突然有料化され、必要な機能が知らぬ間に使えていないことがある
- プラグインにバックドア(別の入り口)があり、ログイン対策でないところから不正行為が行われる可能性がある
- プラグインそのものに脆弱性があり、第三者が直接何かを書きこめるようになってしまっていることがある
WordPressで作ったサイトでWordPressについての記事を書かない
これだけいろいろとWordPressに関する記事を書いておいて言うのは・・・と思いましたが、使っているツールで使っていることが分かるような内容の記事を掲載するのはやはり避けた方がいいと思います。
とはいえ、「書かない」と決めていても、使っていて便利だなと思う事などは知らず知らずのうちに触れてしまったりするでしょうから、そんなときのためにも前述したいろいろな対策は施しておいたほうがいいと思います。