WordPressのセキュリティ対策(脆弱性対策)

WordPressの脆弱性対策を思いつく範囲でまとめてみました!

コンテンツ

WordPressの脆弱性について

WordPressには脆弱性が多いとよく言われています。

これは、実際にはWordPressにだけ特別脆弱性が多いわけではないです。
他のCMSや、CMS以外のシステムでも、世の中に存在するほとんどのプログラムに多くの脆弱性が存在しています。

ただ、WordPressは人気のツールであるが故に利用者も多く、脆弱性が見つかる機会が多く、また、悪意のある人間からの攻撃の対象にされ易いです。
その為に、WordPressだけが脆弱性が多いように認識されてしまっているだけです。

とは言え、もちろんWordPressにも脆弱性は存在しており、多くの報告がなされているので、必ず対策を取っておく必要はあります。
※しっかりと対策さえ取っておけば、本来はほぼ被害を受けることは無いと思います。

そこで、今回はWordPressの脆弱性対策についてまとめておきます。

WordPressインストール時に行う対応

【必須】管理画面の「パスワード」は複雑にする

管理画面にログインするためのパスワードは、必ず複雑な文字列にして下さい。
私がおすすめするパスワードの設定ルールは以下になります。
・数字を必ず含める
・大文字アルファベットと小文字アルファベットを混在させる
・記号を含める
・最低12文字以上にする

因みに、稀に、
パスワードが覚えにくいので、もっと簡単なものに変更して!
と、お客さんから言われることがあります。

その場合は、危険性を説明して、例えお客さんからの要望であっても却下するようにして下さい。

【既存サイトで簡単なパスワードを設定してしまっている場合】

既に運用中のサイトがあり、そちらで簡単なパスワードを設定してしまっている場合には、
必ず変更して下さい。
面倒であれば、WordPressには自動でパスワードを生成してくれる機能があるので、
そこで作り出されたパスワードをそのまま利用して下さい。
WordPress パスワード自動生成ボタン

WordPress 自動生成されたパスワード

【任意】管理画面の「ユーザー名」には「admin」以外を使用する

昔の古いバージョンのWordPressだと、管理者のユーザー名が強制的に「admin」になっていました。
その名残りで、今も「admin」を設定される方が結構多いです。

「ユーザー名」は「パスワード」ほど複雑にする必要はないですが、
admin」以外を使用するようにしましょう。

パスワードを複雑にしておけば、「admin」でも突破される可能性はかなり低くなりますが、
それでも念には念を入れて、「admin」以外を使用されることをおすすめします。

【既存サイトでadminを設定してしまっている場合】

もし、「admin」を使い続けている場合には、
データベースに直接アクセスして、書き換えて下さい。

データベースに関する知識が無くても、ユーザー名を書き換える程度であればそれほど難しくはないと思います。
※方法は、検索すると直ぐに出てきます。

【任意】データベースのテーブルプレフィクスをデフォルト値以外にする

WordPressの設定ファイル「wp-config.php」にテーブルのプレフィクスを設定する箇所があります。

この記述です↓
$table_prefix = 'wp_';

デフォルトの「wp_」のままにしておかず、変更するようにしましょう。

【任意】認証用ユニークキーの設定

WordPressの設定ファイル「wp-config.php」に認証用ユニークキーを設定する箇所があります。

この認証用ユニークキーをデフォルトのままにされている方も多いので、
こちらもきっちりと設定するようにして下さい。

設定方法は簡単です。
■まず、ブラウザ上から以下のURLにアクセスして下さい。
https://api.wordpress.org/secret-key/1.1/salt/

■自動で以下のようなユニークな文字列を作成してくれるので、それらをすべてコピペして下さい。

define('AUTH_KEY', ']rOf*6TY+?CrvIP6pV*`]3;A~Y[@;JvN3GWeI_^nd^f3)9-1hw)xU&*[3#]#H(x');
define('SECURE_AUTH_KEY', '?Ag;:w<[%w Rum-$8e+)S)_0%$@{iAo=E/::J[jJO,4)r');
define('LOGGED_IN_KEY', 'p$.u|S`43aH}/(na+p%l[GoNuoE-M1V2M-8F-|ykM@}-!KIw*&~C$G2PQ|lD[$I5');
define('NONCE_KEY', 'xVFKc-jC@&2R,9BVEj4?[AbU;dwJ })[ll/tY3-S+|]mA,`1-maSpc}ATMpw-h7jt;E2txS-wkK');
define('LOGGED_IN_SALT', '`r. txj7@xxSA=1O]fy2[ZR-$:fz>WYtaaMgiixp8(t!?fO4L6%rq1ss}eBk/Ujr');
define('NONCE_SALT', 'J}EV>-7s]6UnBQ:gOM}qT gv;z|2HvDS PT|xI:|,rMAk,5( QM0+_%uV#aCQ=|L');


■wp-config.phpに以下の記述があるので、それらを全て削除して、上記コードを貼り付けてください。

define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

これでOKです。

WordPressインストール後、初期の段階で行っておくべき対応

【任意】wp-config.phpへのアクセスを制限する

WordPressには「wp-config.php」という設定ファイルがあります。

こちらにはデータベースの情報などを記載しているので、
誰でもアクセスできないように制限を掛けておきましょう。

設定方法は以下を参照して下さい。
[ wp-config.phpへのアクセス制限方法 ]

【任意】xmlrpc.phpとwp-cron.phpへのアクセスを制限する

xmlrpc.php」はピンバック機能などで、
wp-cron.php」は予約投稿やアップデート通知などで利用されるプログラムファイルです。

これらのプログラムは不正アクセスに利用されてしまうことがあるので、
もし不要であればアクセスできないように制限を掛けておきましょう。

詳細は以下を参照して下さい。
[ 【WordPress】アクセス制限を掛けておくべきファイルのまとめ ]

【任意】重要なファイル、ディレクトリのパーミッション(権限)を変更する

重要なファイルやディレクトリの場合には、そのパーミッションも適切に設定することをおすすめします。

wp-config.php

「wp-config.php」の推奨パーミッションは「400」か「404」です。
「400」に設定しておくと、ファイルの所有者のみが「wp-config.php」の読み込みを行えるようになります。

.htaccess

「.htaccess」の推奨パーミッションは「404」です。
「404」で動作しない場合には、「604」を設定してみて下さい。

ただし、パーマリンクの設定時には「.htaccess」への書き込み権が必要になります。
その場合には、一時的に「606」に変更して下さい。

ディレクトリ

各ディレクトリの推奨パーミッションは「705」です。

ただし、「uploads」ディレクトリへは書き込み権限を設定しないといけない場合もでてきます。
その場合には、「707」にして下さい。
※「777」にはしないようにして下さい。

【任意】管理画面へのアクセス元を制限する

管理画面へアクセスする場所が固定されている場合があります。

特に大手企業だと、
・社内以外からの更新を禁止されている
・社内にある特定のPCからしか更新できない
などといった制限があります。

その場合、社内ネットーワークのIPアドレス以外からはアクセスできないようにしましょう。

設定方法は以下を参照して下さい。
[ 管理画面「wp-admin」へのアクセス制限 ]
[ wp-login.phpへのアクセス制限 ]

こちらの設定は、社内のIPアドレスが固定されている場合のみ行えるので、
固定IPアドレスを取得されていない場合には、設定を行えません。

【任意】管理画面の認証方法を複雑にする

管理画面からログインする際の認証機能を強化することも重要です。
強力なのは「二段階認証」ですが、「画像認証」でもOKだと思います。

認証機能の強化はプラグインを使って行います。

「二段階認証」のおすすめプラグイン => 「Google Authenticator」 か 「Duo Two-Factor Authentication
「画像認証」のおすすめプラグイン => 「Advanced noCaptcha & invisible Captcha
※プラグインは他にもあるので、上記プラグインが正常に動作しない場合には、検索して探してみて下さい。

【任意】WordPressのバージョン情報を見えないようにする

デフォルトのままだと、ユーザー公開側ページのヘッダー部分に、
以下のようなバージョン情報を記載したメタタグが追加されます。
<meta name="generator" content=”WordPress 4.9.x">

ブラウザ上からソースコードを見られると使用しているWordPressのバージョンがばれてしまうので、
隠してしまいましょう。

方法は、functions.phpに以下のコードを追加するだけです

remove_action('wp_head', 'wp_generator');

【任意】ログイン画面へのアクセスログ(ログイン履歴)を取る

管理画面へのログイン履歴を残しておくことも重要です。

明らかに不正なアクセスがあれば「ブルートフォース(総当たり攻撃)」の可能性もあるので、
そのIPアドレスからのアクセスに制限を掛けてしまうことも可能です。

詳細は以下を参照して下さい。
[ 「Crazy Bone」で不正ログインの監視 ]

【任意】プラグインを使ってユーザー名を隠す

WordPressを使っていると、ユーザー名(ログインID)を簡単に取得することが出来ます。

以下のURLにアクセスしてみて下さい。
https://example.com/blog/?author=1
以下のURLに自動でリダイレクトされてしまいます。

https://example.com/blog/author/ユーザー名/

これは仕様なのでしかないのですが、「Edit Author Slug」というプラグインを使って、このユーザー名を隠すことが出来ます。

詳細な設定方法は、以下を参照して下さい。
[ WordPress プラグイン「Edit Author Slug」でユーザー名を隠しましょう ]

設定は簡単なので、ぜひ試してみて下さい!

【任意】readme.html、license.txt、wp-config-sample.phpは削除

WordPressをインストールしたディレクトリ直下には、readme.htmlというファイルが保存されています。

このファイルには、WordPressのバージョン情報などが記載されているので、削除してしまいましょう。

また、license.txtwp-config-sample.phpも不要なので、削除してしまって下さい。

もし、WordPressのバージョンアップを行った際には、その都度作成されるので、
都度削除して下さい。

【任意(人によっては必須)】スパム対策のプラグインをインストール

コメント機能を有効にされている方は、スパム対策のプラグインは必須です。
毎日、大量のスパムがコメントが送られてくると、うっとうしいですからね!

スパム対策プラグインとしては、「Akismet Anti-Spam」が一番有名です。

が、「Akismet Anti-Spam」は設定が面倒なのと、ライセンスの関連がよく分からないので、
私は、「Anti-Spam」や「Throws SPAM Away」をおすすめしています。

【任意】wp-config.phpの保存場所を隠す

wp-config.php」は、データベース(MySQL)への接続情報などが記載されている最も重要なファイルになります。

デフォルトではインストールディレクトリの直下に入っていますが、
一つ上の階層に移動させることが可能です。

特別な設定は不要で、「wp-config.php」を一つ上の階層に移すだけで認識してくれます。
※元の場所に置かれている「wp-config.php」は、忘れずに削除して下さい。

【注意点】
こちらの設定が有効なのは、WordPressをドキュメントルートにインストールしている場合です。
例えば、
https://example.com/blog/
のように、サブディレクトリにインストールしている場合には、
ブラウザ上から
https://example.com/wp-config.php
というURLにアクセス出来てしまうので、意味が無くなります。

また、
階層を移動させることで、
動作しなくなるプラグインや予期しなエラーが発生する場合もあるので、注意して下さい。

【任意】メディアの保存ディレクトリを変更する

WordPressのメディア(画像など)の保存先ディレクトリは、
wp-content/uploads/
の直下と決まっています。

その為、URLは、
https://example.com/wp-content/uploads/~
となります。

URLに「wp-content」が入ってしまっているので、
これだとWordPressを使っていることが、すぐにばれてしまいます。

その対策として、メディアのアップロード先を変更することが可能です。
メディアのURL以外からでもWordPressを使っているかどうかを見抜く方法はあるので気休め程度ですが、
時間に余裕のある方は、対応してみましょう!

変更する方法は2パターンありますが、どちらも簡単です。

【パターン①】

wp-config.php」を開いて、
ファイルの一番下辺りに、以下を追記して下さい。

define("UPLOADS", "/photo/");

こうすることで、
メディアのアップロード先が、
URLも「ドキュメントルート/photo/」に変更され、
https://example.com/photo/~
になります。

【パターン②】

ブラウザ上から、
https://example.com/wp-admin/options.php
というURLにアクセスして下さい。
※ドメイン部分は、各自の環境に変更して下さい。

「すべての設定」という画面が表示されるので、upload_pathupload_url_pathの2項目を見つけて、以下のように変更して下さい。

upload_path => ../photo
upload_url_path => https://example.com/photo

これで、設定変更が完了です。

あとは、変更した場所にアップロードした画像が保存されるかを確認して、
問題がなければOKです。

【任意】高度なセキュリティ対策プラグインをインストール

WordPressには高度なセキュリティ強化に特化したプラグインが多数存在します。

それらのプラグインに共通していることは、高度であるが故に、多機能で複雑です。
その為、使いこなすが少し大変です。

ですが、脆弱性対策の為の強力なツールにはあるので、
プラグインを1つインストールして対策を行う方法もあります。

おすすめのプラグインは、
SiteGuard WP Plugin」「All In One WP Security & Firewall」「iThemes Security」辺りです。

有名なプラグインばかりなので、使い方は検索すると直ぐに出てきます。
各自で調べて設定してみて下さい。

因みに、おすすめしておいてなんですが、
以前、セキュリティ強化のプラグインをインストールすると、なぜかログインできなくなるといった不具合を起こしました。

使用する場合には、お客さんから「管理画面にログインできないんですけど・・・」みたいな問い合わせが入らないように、十分注意して下さい。

WordPressの運用開始後に行うべき対応

【必須】WordPress本体やプラグインを常に最新にしておく

脆弱性が見つかった場合に被害に合うのは、
多くの場合、古いバージョンのWordPressを使用されている場合らしいです。

本体のバージョンとなるといろいろと問題が発生す場合もありますが、
常に最新バージョンにしておくことをおすすめしています。
※自動更新機能も有効にしておいてください。

【必須】管理画面の「パスワード」を定期的に変更

複雑なパスワードを設定しておけば簡単には管理画面を突破されることは無いです。

が、
例えば、
・パスワードを記載したメールが外に漏れた
・パスワードを記載した紙が外に漏れた
など、人為的なミスなどで漏れてしまう場合もあります。

その為、定期的に変更することをおすすめします。

それと、そもそもの話しになりますが、
・パスワードをメールに直接記載したり、
・パスワードを記載した情報を印刷して手元に置いておく、
といった運用も止めましょう。

【必須】不要になったプラグインは削除

運用開始後、仕様変更などで不要になったプラグインが出てくることも多々あります。

使っていなくてもサーバ上に残していれば、それを悪用して攻撃されることもあります。

使わなくなったプラグインは、管理画面上に無効化にして残しておくのではなく、完全に削除してしまいましょう。

【必須】不正アクセスを見つけたらブロックする

不正なIPアドレスからのアクセスが見つかった場合には、必ずブロックしておきましょう。

方法としては、
プラグイン「WP-Ban」を利用する方法と.htaccessを利用する方法があります。

プラグイン「WP-Ban」を利用する場合には、以下のページを参考にして下さい。
[ WP-Banを使って不正ログイン対策 ]

.htaccessを利用して設定する場合には、以下の記述を追記するだけです。

order allow,deny
allow from all
deny from xxx.xxx.xx.xxx
deny from xxx.xxx.xx.xxx

その他の対応

【必須】データベース(MySQL)の「パスワード」を複雑にする

WordPressの管理画面だけではなく、データベースとして使用するMySQLのパスワードにも注意して下さい。

簡単なパスワードだと突破されてしまう可能性もあるので、
必ず記号を含めた複雑文字列を設定して下さい。

【必須】HTTPSで通信を行う(常時SSL通信の設定)

今の時代、HTTPSでの常時接続(HTTPS接続の強制化)が当たり前になってきています。
が、まだ設定されていないサイトは多数あります。

それに、ユーザー側に公開するページは意識されていても、管理画面側には設定されていない方もいらっしゃいました。

HTTPS通信の本来の導入目的は、SEO対策ではなくセキュリティ対策なので、
SSLを導入されていない方は、直ぐにインストールして、常時接続の設定を行って下さい。

SSLは導入しているが、常時SSL通信を設定されていない場合には、
管理画面も含めて、必ず常時接続の設定を行って下さい。

常時接続の設定は、プラグインを利用する方法と.htaccessを利用する方法があります。

プラグインを利用される場合には、「Really Simple SSL」か「WP Force SSL」がおすすめです。

.htaccessを使って設定される場合には、
以下のような記述を追記するだけです。

<IfModule mod_rewrite.c>
#SSL通信設定
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

【任意】WAF(Web Application Firewall)を有効にする

最近は、多くのレンタルサーバでWAF(Web Application Firewall)を利用できるようになっています。
日本語にすると、「WEBアプリケーションファイアウォール」になります。

名前の通りですが、WEBアプリケーションに特化したファイアウォールみたいなものです。

かなり強力なセキュリティー対策になるので、WAFを利用できる場合には、出来れば有効化しておくことをおすすめします。

ただし、本来は正常なはずの操作までブロックしてしまうこともあります。
.htaccessである程度回避することも可能ですが、それでも、ブロックされてしまうこともあります。

特に、WordPressの記事投稿時に保存できない。。。
といった報告が多いです。

その為、導入時は慎重に行ってください。

【任意】ログイン画面にアクセス元のIPアドレスを表示させる

ログイン画面にIPアドレスを表示させることで、
管理画面にアクセスしてきた相手に「あなたのIPアドレスを取得してますよ!」という脅しになります。

方法は簡単です。
funtions.phpに以下のコードを追加するだけです。

気休め程度ですが、余裕のある方は設定してみて下さい。

function login_ip_display(){

return "<p class="message">あなたのIPアドレスは <span style="color:#FF0000;font-weight:bold;font-size:14px;">{$_SERVER["REMOTE_ADDR"]}</span> です!</p>";

}
add_filter("login_message", "login_ip_display");

このような表示になります。
WP ログイン画面にIPアドレスを表示

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

Twitter

アーカイブ

PAGE TOP