みなさんWordPressでのセキュリティ対策は講じていますか?
WordPressは拡張性が高く、情報が豊富なことから多くの人に利用されています。
しかし、初期状態のWordPressは脆弱性がいくつも存在し、その脆弱性をついた攻撃が多く発生しています。
セキュリティ対策をしっかりと講じていれば良いのですが、初期状態のまま利用している人が多くいるのが現状です。
攻撃の内容によっては、閲覧できなくなってしまったり、サイトが乗っ取られたりする可能性があります。
そこで今回はWordPressでセキュリティを高める方法を解説します。
常時SSL
まずは常時SSLです。
SSLとはサイト上でのやりとりを暗号化する仕組みです。
SSL化することでやりとりを盗み見されることを防ぐことができ、サイトの表示を速くすることができます。
また、GoogleはHTTPSページが優先的にインデックスされると明言しており、SSL化することで大きなメリットがあることが分かります。
Google 検索セントラル – HTTPS ページが優先的にインデックスに登録されるようになります
SSLは設定して当たり前になってきていますが、WordPressのセキュリティを高める方法の1つとして解説します。
なお、今回はSSLを有効にしていることを前提として、常時SSL化する部分の解説をします。
こちらはWordPressのルートディレクトリ直下にある「.htaccess」を使用して対応します。
1 2 3 4 5 6 7 8 9 10 11 12 | # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
「.htaccess」のデフォルトは上記のようになっていると思います。
1 2 3 4 5 6 7 | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
こちらの記述を追記することにより、WordPress全体でSSLリダイレクトされます。
記述内容を簡単に説明しますと、
「1行目でURLの書き換えを有効にし、2行目から3行目でHTTPSリクエストではないときにhttpsにリダイレクトしますよ」という意味になります。
なお、追記する際には「# BEGIN WordPress」よりも前に記述してください。
また、「# BEGIN WordPress」から「# END WordPress」の間に記述するとWordPress側で勝手に書き換えられてしまうことがあるため、「# BEGIN WordPress」から「# END WordPress」の外に記述するようにしてください。
ログイン画面と管理画面の保護
WordPressはデフォルトではログインの試行回数に制限はなく、ユーザー名とパスワードだけでログインできてしまいます。
そのため不正アクセスを防ぐためにはログイン画面の保護が重要です。
また、管理画面へアクセスできる環境を制限することも有効な方法です。
ログイン画面と管理画面の保護はプラグインを用いる方法と「.htaccess」で対応する2つの方法があります。
社内(特定のIPアドレス)でしかアクセスできないようにするなど、管理画面へアクセスする環境が決まっている場合にはどちらも有効にするとよいでしょう。
反対にアクセスする環境が頻繫に変わる可能性があり、アクセス環境による制限を設けたくない場合にはプラグインによる設定がよいでしょう。
プラグインによる保護
1つ目が「SiteGuard WP Plugin」というプラグインによる方法です。
WordPress プラグイン – SiteGuard WP Plugin
こちらのプラグインを使用すると、後述の様々なWordPressの既存の脆弱性から保護してくれるためおすすめです。
ただし、すでにセキュリティ対策プラグインが入っている場合、プラグイン同士による競合が発生する恐れがあるため注意が必要です。
ログイン画面の保護
プラグインをインストールするとデフォルトで下記の6項目がデフォルトで有効になっており、インストールするだけでログイン画面の保護が適用されます。
保護の内容としては、ログインURLが「/login_******」というURLに変更され、ログインの際にはユーザー名とパスワードのほかに画像認証も追加されます。
これで「/wp-login.php」にアクセスしてもログイン画面が表示されなくなり、ユーザー名とパスワードだけでログインすることもできなくなりました。
※ログインURLは忘れないようにブックマークに追加するなど、しっかりと保存しておきましょう。
しかし、ログインしていない状態で【/wp-admin/】にアクセスすると、WordPressのデフォルトの仕様により自動的にログイン画面にリダイレクトされてしまいます。
この機能がある限りログインページのURLを変更してもあまり意味がありません。
そのため、ログインページ変更の画面でオプションの「管理者ページからログインページへリダイレクトしない」という項目を有効しましょう。
管理画面の保護
続いて、管理画面の保護です。
下記のように管理ページアクセス制限の画面でOFFとなっているところをONにすることで保護が有効になります。
これでプラグインを使用した保護は完了です。
このプラグインでは他にも設定項目がありますので必要に応じて設定するとよいでしょう。
なお、社内(特定のIPアドレス)でしかアクセスできないようにするなど、管理画面へアクセスする環境が決まっている場合には、次の「.htaccess」によるアクセス制限も併せて行うとよいでしょう。
.htaccessによる保護
2つ目が「.htaccess」を使用した方法です。
「.htaccess」での方法は、ログイン画面と管理画面ともにIPアドレスによるアクセス制限での保護になります。
ログイン画面の保護
まず、ログイン画面の保護です。
ログイン画面はWordPressのルートディレクトリ直下にある「.htaccess」に下記の記述を追記することで保護できます。
「**.**.**.**」の部分にはアクセスを許可したいグローバルIPアドレスを指定してください。
1 2 3 4 5 6 7 | <Files wp-login.php> Order deny,allow Deny from all Allow from **.**.**.** </Files> |
こちらはSSLのリダイレクトのときと同様に、「# BEGIN WordPress」から「# END WordPress」の記述の外側かつ、「# BEGIN WordPress」よりも前に追記してください。
なお、アクセス制限の際にはリダイレクト処理を挟む必要がないため、前述のSSLリダイレクトの記述よりも前に追記するとよいでしょう。
管理画面の保護
次に管理画面の保護です。
管理画面は基本的に「/wp-admin/」の階層になるため、「/wp-admin/」自体にアクセス制限すると管理画面全体にアクセス制限が適用されます。
ログイン画面の保護の際はWordPressのルートディレクトリ直下にある「.htaccess」に対してアクセス制限したいファイル名を指定する形で保護をしましたが、「.htaccess」の仕様上特定のファイルまたはその「.htaccess」がある階層に対してしかアクセス制限ができず、ディレクトリを指定してアクセス制限することができません。
そのため、管理画面の保護ではWordPressのルートディレクトリ直下にある「.htaccess」ではなく、「/wp-admin/」の直下に「.htaccess」を作成し、下記を記述することで保護します。
1 2 3 4 5 | Order deny,allow Deny from all Allow from **.**.**.** |
xmlrpc.phpの無効化
xmlrpc.phpは、自分の記事のリンクが他の人のサイトで貼られた際に自分宛てに通知が届くピンバック/トラックバック機能や、WordPressのスマートフォンアプリで記事の作成等ができるようにするためのファイルです。
便利な機能を実装するためのファイルではあるのですが、
WordPressサイトへ攻撃する際によく悪用されるファイルでもあります。
DDoS攻撃
DDoS攻撃(Distributed Denial of Service attack)とは、複数のところから大量のデータやリクエスト等を送信することでサーバに対して過負荷を与える攻撃です。
そのDDoS攻撃に関係しているのが前述のxmlrpc.phpファイルのピンバック/トラックバック機能です。
ピンバック/トラックバック機能とは、自分の記事のリンクが他の人のサイトで貼られた際に自分宛てに通知が届くというものです。
しかし、複数のサイトで同時に自分の記事のリンクが張られるとその通知が同時に届き、その通知を同時に処理しようとするためサーバに過負荷がかかりアクセスができなくなるなどの影響が発生してしまいます。
総当たり攻撃
総当たり攻撃(ブルートフォースアタック)とは、IDやパスワードで考えられるパターン全てを試行してログインしようとする攻撃です。
総当たり攻撃に関係しているのが、WordPressのスマートフォンアプリで記事の作成等ができるようになる機能です。
スマートフォンアプリ経由でWordPressにアクセスする際、xmlrpc.phpで認証が行われます。
一般的に以下のようなログインページでは、プラグイン等でログインの試行回数やGoogle Recaptchaなどの多要素認証が取り入れることができます。
しかし、xmlrpc.php経由での認証の場合にはログインの試行回数や多要素認証などが適用されないため、
ユーザー名とパスワードだけでログインすることができ、入力回数も制限がありません。
そのため総当たり攻撃の標的となりやすいのです。
これらの攻撃から守るため、xmlrpc.phpに対してアクセス制限が必要となります。
ただし、WordPressのスマートフォンアプリやJetpackなどの一部のプラグインで使用している場合には動かなくなる恐れがあるため注意が必要です。
アクセス制限は「.htaccess」で行います。
他にもxmlrpc.phpに対してパーミッションを設定する方法やファイルを削除するという方法もありますが、WordPressをアップデートするたびに作成、更新されてしまいその都度対応する必要が出てきてしまうため、「.htaccess」でアクセス制限することをお勧めします。
下記をWordPressのルートディレクトリ直下にある「.htaccess」の「# BEGIN WordPress」よりも上に追記することでアクセス制限できます。
1 2 3 4 5 6 | <Files xmlrpc.php> Order deny,allow Deny from all </Files> |
まとめ
ということで今回はWordPressでのセキュリティ対策について解説しました。
いかがだったでしょうか?
サイトは集客においてとても重要なものです。
そのサイトが攻撃され利用できなくなった場合、復旧するまでの間サイトでの集客ができなくなり損失が発生しますし、復旧のための費用も掛かります。
また、最悪の場合は今まで作成してきたコンテンツを全て失うということもあり得ます。
少しでもこれらのリスクを減らすために、まだ講じていないというかたは今からでもセキュリティ対策を講じることをお勧めします。
また、既に講じているから大丈夫だと思っているかたもこの機会に見直してみてはいかがでしょうか。
なお、今回紹介した対策を講じたからもう攻撃されることはないということではありません。
紹介した内容はセキュリティ対策の一部にしか過ぎません。
そもそもセキュリティ対策というのは攻撃されなくするためのものではなく、攻撃されにくくするためのものであり、セキュリティ対策に完璧も終わりもありません。
その点だけ理解いただければと思います。
以上、最後までご覧いただきありがとうございました~。