※当記事内には、商品プロモーションを含む場合があります
読んでほしい記事
WordPressの脆弱性対策を思いつく範囲でまとめてみました!

今回は、WordPressの脆弱性対策(セキュリティ対策)について、思いつくものを全てまとめてみました。
WordPressの脆弱性対策を行いたい方は、参考にして下さい。

コンテンツ

WordPressの脆弱性について

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

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

WordPressは人気ツールであるために脆弱性が見つかりやすい

ただ、WordPressは人気のツールであるが故に世界中に利用者が多く、脆弱性が見つかる機会が多いです。
また、悪意のある人間からの攻撃の対象にされやすいです。

その為に、WordPressだけが脆弱性が多いように認識されてしまっているだけです。

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

 

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

まずは、WordPressのインストール時に行う対応をまとめていきます。

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

管理画面へログインするためのパスワードは、必ず複雑な文字列にして下さい。
私がおすすめするパスワードの設定ルールは以下になります。

  • 数字を必ず含める
  • 大文字アルファベットと小文字アルファベットを混在させる
  • 記号を含める
  • 最低12文字以上にする

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

その場合は、危険性を説明して、お客さんにも理解してもらうようにしましょう。

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

既に運用中のWEBサイトがあり、そちらで簡単なパスワードを設定してしまっている場合には、必ず変更して下さい。

WordPressには自動でパスワードを生成してくれる機能があるので、
そこで作り出されたパスワードをそのまま利用して下さい。
WordPress パスワード再設定

WordPress パスワード再設定

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

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

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

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

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

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

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

phpMyAdminを利用できる場合には、そちらを使うと簡単に変更を行えます。
「xxx_user」テーブルがあるので、「user_login」の項目を修正するだけです。
userテーブルの修正

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

WordPressでは、インストール時、データベース内に自動で複数のテーブルが作成されます。
そのテーブル名にはプレフィクスというモノが付けられます。

このプレフィクスは、設定ファイル「wp-config.php」で設定する事ができます。

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

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

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

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

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

設定方法は簡単です。

レンタルサーバーのインストール機能を利用される場合には、多くの場合、自動で設定されます。
その為、設定不要な場合が多いです。

もし、手動でWordPressのインストールを行う場合には、以下のように設定してください。

■まず、ブラウザ上から以下の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<w.}_?rq<+rad5[fg!>%$@{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<esqd}?!;mc8m{mm7v`'); define('auth_salt',="" ')o1=".Wr,Krl]3C.e,RD&f[FtFFP,bqSEM1]OZUr%TJAxf)+=UCukCs8H:ga/RQ4l');" define('secure_auth_salt',="" '2f7wk|jj]@qey+aw|abph9#|h]rw}cg#x="">,`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');</esqd}?!;mc8m{mm7v`');></w.}_?rq<+rad5[fg!>


■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インストール後、初期の段階で行っておくべき対応

次は、WordPressをインストール後に行う対応をまとめていきます。

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

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

こちらにはデータベースの情報など重要な情報が記述されています。
その為、外部からアクセスできないように制限を掛けておきましょう。

設定方法は以下を参照して下さい。
[ WordPressのアクセス制限を掛けておくべきファイル ]

【任意】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」にはしないようにして下さい。

【任意】管理画面へのアクセス元を制限する(特定の場所でのみ作業許可)

WordPress管理画面へアクセスできる場所を、IPアドレスで固定すこともおすすめです。
それにより、特定の場所(例えば、社内、事務所内)でしか記事の編集や設定変更などを行えなくすることができます。

注意点としては、作業を出来る場所が限られてしまうというところです。
例えば、自宅からは記事の更新が行えないといった不便さは発生します。

設定方法は以下を参照して下さい。
[ WordPressのアクセス制限を掛けておくべきファイル ]

こちらの設定は、IPアドレスが固定されている場合のみ行えます。固定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');

【任意】ログイン画面へのログイン履歴を残す

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

管理画面へは、通常は運営者や制作者以外はアクセスしません。
にもかかわらず、それ以外のIPアドレスからのログイン履歴が残っている場合、不正アクセスを疑う必要もあります。

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

管理画面のログイン履歴を残す場合には、「User Login History」というプラグインが便利です。

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

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

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

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

これは仕様なのでしかないのですが、「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」は設定が面倒なのと、ライセンスの関連がよく分からないプラグインです。
私は、「Antispam Bee 」や「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には、高度なセキュリティ強化に特化したプラグインが多数存在します。

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

ですが、脆弱性対策の為の強力なツールにはあるので、インストールして対策を行うのもおすすめです。

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

有名なプラグインばかりなので、使い方は検索すると直ぐに出てきます。
また、セキュリティ強化プラグインは他にもたくさんあるので、興味のある方は調べてみて下さい。

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

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

セキュリティプラグインとしては、国産の「CloudSecure WP Security」もあります。
日本語なので使いやすく、日本人にはおすすめです。

 

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

【必須】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化の設定)

今の時代、WEBサイト全体をHTTPSで常時接続(HTTPS接続の強制化)するが当たり前になってきています。

SEO対策の為にSSLのインストールを行っている方も多いです。
ですが、HTTPS通信の本来の目的は、SEO対策ではなくセキュリティ対策(情報の暗号化)です。

SSLを導入されていない方は、直ぐにインストールして、常時接続の設定を行って下さい。

因みに、SSL証明書には3種類ありますが、個人利用の場合には「ドメイン認証SSL(DV)」になります。
※無料SSLは、このドメイン認証SSL(DV)になります。

ですが、法人利用の場合には、よりセキュリティレベルの高い「企業認証SSL(OV)」や「EV認証SSL(EV)」もおすすめです。

有料のSSL証明書の購入は、エックスサーバーSSL(Xserver SSL)がおすすめです。
>> エックスサーバーSSLについて

また、SSL証明書の違いについて詳しく知りたい方は、こちらの記事をチェックして下さい。

常時SSL化の方法

SSLはインストールしているが、常時SSL化を設定されていない方もいます。
それだと、単純のHTTPS通信できるようになっているだけなので、管理画面も含めて、必ず常時接続の設定を行って下さい。

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

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

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

<IfModule mod_rewrite.c>
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アドレスを表示

 

最後に

今回は、WordPressのセキュリティ対策について、思いつくものを全てまとめてみました。

ですが、正直、WordPressのセキュリティ対策は、調べれば、他にもたくさん出てきます。
その為、全ての対策を行うは、かなりハードルが高くなります。

まずは、優先度の高いものから設定を行いましょう。
優先順位の低い設定に関しては、余裕がある時でもOKです。

 

この記事を書いた人
userimg
ダッチ
    プログラミング15年、WEB制作15年以上になります。

    ブログ・WordPress・レンタルサーバーに関して分からないことがあればご質問ください!
    ご質問・ご相談は無料で受け付けています。

    https://dacchi.hp.peraichi.com/

    WEB制作に関するお仕事の依頼は、こちらのホームページからお願いします。

    丹波のホームページ屋さん

    Twitterでフォローしよう

    おすすめの記事