簡単にできるWordPressのセキュリティ対策×12

41,000View
野村輝のプロフィール画像
エンジニア野村輝

ベイジでエンジニアをしている野村です。

ベイジには2012年の新年ともに入社し、WordPressやMovable TypeなどのCMSのカスタマイズなど、サーバーサイドの開発を中心に行っています。今後もそのあたりの情報を発信していきたいと思います。

今回は、WordPressについて。

WordPressはブログシステムというより、もはやCMSといっていいでしょう。インストールなどの設定も簡単、自由にカスタマイズできるプラグインやデザインテーマも豊富、何よりオープンソースで無償、ということで世界中で広く使われています。

このように数多くのメリットがあり、コストパフォーマンスが非常に高いWordPressですが、最近、セキュリティ上の問題を理由に、WordPressの使用を禁止している企業にしばしば出会います。

確かにWordPressは特別セキュアなCMSではありませんが、他の多くのCMSと比べて、特別セキュリティが弱いわけでもありません。それなのにことさらに危険な印象を持たれてしまっているのは、単純に利用者が多く、それに比例して、改竄などのトラブルも多いからでしょう。

しかしながらこれは、「Windowsの方がMacより危険」という考えとほとんど同じ発想です。利用者が多いということは、杜撰な利用をしている企業・人も多く、悪意ある人物の標的になりやすく、トラブルの数自体は多くなる、ということですが、そのことと「システムの構造がセキュアではない」ということは別問題です。

このような誤った捉え方により、本来はWordPressでもまったく問題ないプロジェクトなのに、WordPressの数々メリットを放棄してわざわざ別のCMSを選択してしまうのは、非常にもったいないことだと思います。

WordPressも適切に設定すれば、他のCMSと同様のセキュリティレベルに高めることができます。別の言い方をすれば、WordPress以外のCMSを選んでも、杜撰な設定や運用をしていては、同じようにセキュリティ上のリスクを生じるということです。

またWordPressは、世界中で幅広く使われているオープンソースだからこそ、脆弱性が発見されるとすぐにセキュリティパッチを含むアップデートが開発されます。つまり、開発体制が貧弱な商用CMSを導入するよりむしろ安全、という面もあります。

そこでここでは、WordPressのセキュリティレベルをできるだけ高めるために、簡単に実践できる対策をまとめました。これだけのことをしっかりやれば、情報発信目的の中規模サイトならWordPressで十分、ということになるかと思います。

エンジニアではない方でも真似できるよう、実現方法もできるだけ優しく解説しています。是非参考にしてみてください。

1:WordPressで構築されていることを隠す

WordPressサイトへの攻撃は、WordPressの特性やセキュリティホールを利用して攻撃してくることが多いです。そのため、WordPressが自動で出力するタグを隠し、ソースを見てもサイトがWordPressで構築されていることがわからないようにするだけで、攻撃対象になるリスクを軽減できます。

例えば、WordPressのテーマディレクトリのfunctions.phpに、不要なタグの出力を停止する以下のような設定を追記することで、その対応が可能です。

remove_action('wp_head', 'wp_generator');// WordPressのバージョン
remove_action('wp_head', 'wp_shortlink_wp_head');// 短縮URLのlink
remove_action('wp_head', 'wlwmanifest_link');// ブログエディターのマニフェストファイル
remove_action('wp_head', 'rsd_link');// 外部から編集するためのAPI
remove_action('wp_head', 'feed_links_extra', 3);// フィードへのリンク
remove_action('wp_head', 'print_emoji_detection_script', 7);// 絵文字に関するJavaScript
remove_action('wp_head', 'rel_canonical');// カノニカル
remove_action('wp_print_styles', 'print_emoji_styles');// 絵文字に関するCSS
remove_action('admin_print_scripts', 'print_emoji_detection_script');// 絵文字に関するJavaScript
remove_action('admin_print_styles', 'print_emoji_styles');// 絵文字に関するCSS

2:WordPress及びプラグインを最新版にする

WordPressやプラグインのセキュリティホールはたびたび報告されていますが、その都度パッチが公開されています。セキュリティホールをついた攻撃を未然に防ぐためにも、WordPressやプラグインは常に最新版であることが望ましいです。

WordPressや使用しているプラグインの新しいバージョンが公開されると、管理画面に通知されるようになっています。気づいたら最新版にアップデートし、攻撃に対処しておきましょう。

3:不要なプラグインを削除する

使用していないプラグインを残しておくと、そのプラグインのセキュリティホールを攻撃されることもあります。確率としてはそれほど高くはないですが、攻撃の可能性を少しでも減らするため、使用していないプラグインもこまめに削除しておきましょう。

4:ログイン画面のURLを変更する

WordPressサイトの攻撃の多くは、ログイン画面に対しておこなわれます。それ故に、ログイン画面のURLを、デフォルトのものから変更していないと、一斉攻撃の対象になりやすいです。逆に言えば、URLを変更してログイン画面自体を簡単に見つけられないようにするだけで、攻撃対象になるリスクを軽減できます。

ログイン画面のURL変更は、「SiteGurad WP Plugin」プラグインで実現できます。

  1. プラグインの新規追加画面で「SiteGurad WP Plugin」をインストールして、有効化します。
  2. SiteGuradメニューの中から「ログインページ変更」をクリックします。
  3. 設定画面で「変更後のログインページ名」にwp-login.phpに代わるファイル名を入力(例.Mz3UDfQF)して、変更を保存します。
  4. 一度ログアウトして、今までのログイン画面にアクセスすると404画面が表示されます。(例.https://example.com/wp-login.php)
  5. 今回設定したログイン画面のURLにアクセスすると、ログイン画面が表示されます。(例.https://example.com/Mz3UDfQF)

5:ログイン画面にBasic認証を設定する

ログイン画面のURLを変更するだけでなく、Basic認証も設定して、ログインを二重にすることでセキュリティを高めることができます。

ログイン画面にBasic認証を設定するには、パスワードファイルをサーバーにアップロードして.htaccessへBasic認証の設定を追記します。

  1. .htpasswd(パスワードファイル)を作成して、サーバーにアップロードする。
    .htpasswdの作成はこちらのサービスを利用すると便利です。
    https://www.luft.co.jp/cgi/htpasswd.php
  2. .htaccessにBasic認証の設定を追記してサーバーにアップロードする。
<Files wp-login.php>
AuthUserFile /[.htpasswdまでのディレクトリ]/.htpasswd
AuthGroupFile /dev/null
AuthName "Protected Area"
AuthType Basic
require valid-user
</Files>

6:ログイン画面のアクセスを接続元のIPで制限する

ログイン画面にアクセスできる場所をIPで限定することで、不特定多数のログイン画面へのアクセスを防ぎます。

ログイン画面にIP制限を設定するには、.htaccessへIP制限の設定を追記し、サーバーにアップロードして完了です。

なお、IP制限を設定すると、例えばリモート環境からはアクセスできなくなってしまうため、運用上の問題がないかは、事前に確認しておきましょう。

<Files wp-login.php>
order deny,allow
deny from all
allow from [許可するIP]
</Files>

7:ログインの失敗回数を制限する

攻撃者はパスワードを自動生成して何度も管理画面のログインを試行してきます。(ブルートフォースアタックといいます)

ログインを突破されることがなくても、アクセスが増えることで、サーバーに対する負荷もかかり、画面の表示が遅くなるなどの問題も発生します。その攻撃を防ぐためには、ログインに一定回数失敗したとき、その接続元から一定時間ログインできないようにすることが効果的です。

ログイン回数の制限は、「SiteGurad WP Plugin」というプラグインで実現できます。

  1. プラグインの新規追加画面で「SiteGurad WP Plugin」をインストールして、有効化します。
  2. プラグインを有効化するだけで、「5秒間に3回連続でログインに失敗すると1分ロックされる」機能が実行されます。
  3. ロックする回数、時間などを変更する場合は、SiteGuradのメニューから「ログインロック」をクリックして設定画面を表示して変更してください。

8:ログインに画像認証を追加する

攻撃者は、自動プログラムによるなりすましを行うことがあります。ログイン時に人の目による画像認証を入れることで、機械によるなりすましを防ぐことができます。

画像認証は、「SiteGurad WP Plugin」プラグインで実現できます。

  1. プラグインの新規追加画面で「SiteGurad WP Plugin」をインストールして、有効化します。
  2. プラグインを有効化するだけで、ログイン画面に画像認証が表示されます。
  3. 画像認証の文字種などを変更する場合は、SiteGuradのメニューから「画像認証」をクリックして設定画面を表示して変更してください。

9:WordPressの設定ファイルへのアクセスを制限する

設定ファイルの不正な更新を防ぐためにもファイルに対するアクセス権限は適切に設定しておきます。これも、.htaccessの設定で可能です。

  • .htaccessのパーミッションは「604」に設定(読み込み可能、ファイルの所有者のみ変更可能)
  • wp-config.phpのパーミッションは「600」に設定(ファイルの所有者のみ読み込みと変更可能)

10:ユーザーのパスワードを複雑にする

パスワードが、サイトや企業などの情報から推測しやすいもの、管理者の名前、一般的に使用されているパスワードであると、攻撃者による不正なログインの原因となる可能性があります。例えば以下のようなパスワードは、できるだけ避けるようにしましょう。

  • 企業名、ドメイン:例)baigie、baigie.meなど
  • 電話番号:例)0364078750、64078750など
  • 名前(苗字、名前):例)kuroita、goroなど
  • 日付(生年月日、設立日):例)19321123、1932など
  • 地域名(都道府県、市区町村名):例)hokkaido、furanoなど
  • よく使用されるパスワード:例)admin、passwordなど
  • ユーザー名:ユーザー名とパスワードが同じ

不正ログインをさせないためにも、WordPressの「パスワードを生成する」機能で生成した複雑なパスワード使用することをオススメします。

11:利用者ごとにユーザーを用意する

一つのユーザーを複数人で共用していると、運用を続けているうちに、退職者なども含めて、どこの誰がログインできるのかがわからなくなってしまいます。

そこで、利用者分のユーザーを作成して、さらに管理画面の操作できる範囲の権限を各ユーザーごとに設定しておきましょう。利用者が退職したとき、または部署変更などで管理画面を利用することがなくなった場合は、その人が使用していたユーザーを削除します。

ユーザーを共有すると、記事の新規追加や編集したユーザーも特定できなくなるため、運用面から見ても、ユーザーは個別に設定すべきでしょう。

12:phpMyAdminを削除する

データベース(MySQL)をブラウザから操作できるphpMyAdminはとても便利ですが、WordPressのキモとなるデータベースを外部から操作できる状況をそのままにしておくことは極めて危険です。

不正なアクセスをIP制限やBasic認証を設定して防ぐ方法もありますが、そもそも運用時にphpMyAdminを使用しないのであれば、サーバーからphpMyAdminに関するディレクトリやファイルは削除しておきましょう。

さいごに

今回紹介した対策を実施すれば、WordPressに対するほとんどの攻撃を防ぐことができます。多くの企業にとって、このレベルを超える攻撃にさらされることはほとんどないはずです。

ただ、このようにWordPress自体のセキュリティレベルを上げても、サーバーやログイン情報、ユーザーの管理ができておらず、外部に情報が漏れるようなことがあっては、意味がありません。

サイトを安全に運用するためにも、WordPressのセキュリティ対策はもちろんのこと、それも含めた運用ルールの徹底と、定期的な実施状況の確認が不可欠です。

しかしこれもまた、他のCMSと同じであり、WordPressだけが特別なわけではありません。WordPressに固執する必要はありませんが、WordPressだからこそのメリットもたくさんあります。ここにあげたセキュリティ対策なども参考にして、適切な知識を持って、WordPress導入の可否を冷静に判断しましょう。

私たちは顧客の成功を共に考えるウェブ制作会社です。

ウェブ制作といえば、「納期」や「納品物の品質」に意識を向けがちですが、私たちはその先にある「顧客の成功」をお客さまと共に考えた上で、ウェブ制作を行っています。そのために「戦略フェーズ」と呼ばれるお客さまのビジネスを理解し、共に議論する期間を必ず設けています。

成果にこだわるウェブサイトをお望みの方、ビジネス視点で相談ができるウェブ制作会社がいないとお困りの方は、是非ベイジをご検討ください。

ベイジは業務システム、社内システム、SaaS、管理画面といったウェブアプリケーションのUIデザインにも力を入れています。是非、私たちにご相談ください。

ベイジは通年で採用も行っています。マーケター、ディレクター、デザイナー、エンジニア、ライターなど、さまざまな職種を募集しています。ご興味がある方は採用サイトもご覧ください。

こんな記事も読まれています

簡単CSSアニメーション&デザイン20選(ソースコードと解説付き)
酒井琢郎のプロフィール画像
酒井琢郎
599,756View
BtoBサイトを成功に導く180のチェックリスト
枌谷力のプロフィール画像
枌谷力
133,427View
サイトの表示高速化につながる18のこと
酒井琢郎のプロフィール画像
酒井琢郎
127,223View
WordPressの管理画面を使いやすくする簡単カスタマイズ18選
酒井琢郎のプロフィール画像
酒井琢郎
77,114View
上に戻る