サーバサイド8,105Viewエンジニア野村輝ベイジでエンジニアをしている野村です。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で構築されていることを隠す2:WordPress及びプラグインを最新版にする3:不要なプラグインを削除する4:ログイン画面のURLを変更する5:ログイン画面にBasic認証を設定する6:ログイン画面のアクセスを接続元のIPで制限する7:ログインの失敗回数を制限する8:ログインに画像認証を追加する9:WordPressの設定ファイルへのアクセスを制限する10:ユーザーのパスワードを複雑にする11:利用者ごとにユーザーを用意する12:phpMyAdminを削除するさいごに1:WordPressで構築されていることを隠すWordPressサイトへの攻撃は、WordPressの特性やセキュリティホールを利用して攻撃してくることが多いです。そのため、WordPressが自動で出力するタグを隠し、ソースを見てもサイトがWordPressで構築されていることがわからないようにするだけで、攻撃対象になるリスクを軽減できます。WordPressのテーマディレクトリのfunctions.phpに、不要なタグの出力を停止する以下のような設定を追記することで、その対応が可能です。絵文字に関するCSS2:WordPress及びプラグインを最新版にするWordPressやプラグインのセキュリティホールはたびたび報告されていますが、その都度パッチが公開されています。セキュリティホールをついた攻撃を未然に防ぐためにも、WordPressやプラグインは常に最新版であることが望ましいです。WordPressや使用しているプラグインの新しいバージョンが公開されると、管理画面に通知されるようになっています。気づいたら最新版にアップデートし、攻撃に対処しておきましょう。3:不要なプラグインを削除する使用していないプラグインを残しておくと、そのプラグインのセキュリティホールを攻撃されることもあります。確率としてはそれほど高くはないですが、攻撃の可能性を少しでも減らするため、使用していないプラグインもこまめに削除しておきましょう。4:ログイン画面のURLを変更するWordPressサイトの攻撃の多くは、ログイン画面に対しておこなわれます。それ故に、ログイン画面のURLを、デフォルトのものから変更していないと、一斉攻撃の対象になりやすいです。逆に言えば、URLを変更してログイン画面自体を簡単に見つけられないようにするだけで、攻撃対象になるリスクを軽減できます。Plugin」プラグインで実現できます。Plugin」をインストールして、有効化します。SiteGuradメニューの中から「ログインページ変更」をクリックします。設定画面で「変更後のログインページ名」にwp-login.phpに代わるファイル名を入力(例.Mz3UDfQF)して、変更を保存します。一度ログアウトして、今までのログイン画面にアクセスすると404画面が表示されます。(例.https://example.com/wp-login.php)今回設定したログイン画面のURLにアクセスすると、ログイン画面が表示されます。(例.https://example.com/Mz3UDfQF)5:ログイン画面にBasic認証を設定するログイン画面のURLを変更するだけでなく、Basic認証も設定して、ログインを二重にすることでセキュリティを高めることができます。ログイン画面にBasic認証を設定するには、パスワードファイルをサーバーにアップロードして.htaccessへBasic認証の設定を追記します。.htpasswd(パスワードファイル)を作成して、サーバーにアップロードする。.htpasswdの作成はこちらのサービスを利用すると便利です。https://www.luft.co.jp/cgi/htpasswd.php.htaccessにBasic認証の設定を追記してサーバーにアップロードする。valid-user</Files>6:ログイン画面のアクセスを接続元のIPで制限するログイン画面にアクセスできる場所をIPで限定することで、不特定多数のログイン画面へのアクセスを防ぎます。ログイン画面にIP制限を設定するには、.htaccessへIP制限の設定を追記し、サーバーにアップロードして完了です。IP制限を設定すると、例えばリモート環境からはアクセスできなくなってしまうため、運用上の問題がないかは、事前に確認しておきましょう。[許可するIP]</Files>7:ログインの失敗回数を制限する攻撃者はパスワードを自動生成して何度も管理画面のログインを試行してきます。(ブルートフォースアタックといいます)ログインを突破されることがなくても、アクセスが増えることで、サーバーに対する負荷もかかり、画面の表示が遅くなるなどの問題も発生します。その攻撃を防ぐためには、ログインに一定回数失敗したとき、その接続元から一定時間ログインできないようにすることが効果的です。Plugin」というプラグインで実現できます。Plugin」をインストールして、有効化します。プラグインを有効化するだけで、「5秒間に3回連続でログインに失敗すると1分ロックされる」機能が実行されます。ロックする回数、時間などを変更する場合は、SiteGuradのメニューから「ログインロック」をクリックして設定画面を表示して変更してください。8:ログインに画像認証を追加する攻撃者は、自動プログラムによるなりすましを行うことがあります。ログイン時に人の目による画像認証を入れることで、機械によるなりすましを防ぐことができます。Plugin」プラグインで実現できます。Plugin」をインストールして、有効化します。プラグインを有効化するだけで、ログイン画面に画像認証が表示されます。画像認証の文字種などを変更する場合は、SiteGuradのメニューから「画像認証」をクリックして設定画面を表示して変更してください。9:WordPressの設定ファイルへのアクセスを制限する設定ファイルの不正な更新を防ぐためにもファイルに対するアクセス権限は適切に設定しておきます。これも、.htaccessの設定で可能です。.htaccessのパーミッションは「604」に設定(読み込み可能、ファイルの所有者のみ変更可能)wp-config.phpのパーミッションは「600」に設定(ファイルの所有者のみ読み込みと変更可能)10:ユーザーのパスワードを複雑にするパスワードが、サイトや企業などの情報から推測しやすいもの、管理者の名前、一般的に使用されているパスワードであると、攻撃者による不正なログインの原因となる可能性があります。以下のようなパスワードは、できるだけ避けるようにしましょう。):例)hokkaido、furanoなどよく使用されるパスワード:例)admin、passwordなどユーザー名:ユーザー名とパスワードが同じ不正ログインをさせないためにも、WordPressの「パスワードを生成する」機能で生成した複雑なパスワード使用することをオススメします。11:利用者ごとにユーザーを用意する一つのユーザーを複数人で共用していると、運用を続けているうちに、退職者なども含めて、どこの誰がログインできるのかがわからなくなってしまいます。そこで、利用者分のユーザーを作成して、さらに管理画面の操作できる範囲の権限を各ユーザーごとに設定しておきましょう。利用者が退職したとき、または部署変更などで管理画面を利用することがなくなった場合は、その人が使用していたユーザーを削除します。ユーザーを共有すると、記事の新規追加や編集したユーザーも特定できなくなるため、運用面から見ても、ユーザーは個別に設定すべきでしょう。12:phpMyAdminを削除するデータベース(MySQL)をブラウザから操作できるphpMyAdminはとても便利ですが、WordPressのキモとなるデータベースを外部から操作できる状況をそのままにしておくことは極めて危険です。不正なアクセスをIP制限やBasic認証を設定して防ぐ方法もありますが、そもそも運用時にphpMyAdminを使用しないのであれば、サーバーからphpMyAdminに関するディレクトリやファイルは削除しておきましょう。さいごに今回紹介した対策を実施すれば、WordPressに対するほとんどの攻撃を防ぐことができます。多くの企業にとって、このレベルを超える攻撃にさらされることはほとんどないはずです。このようにWordPress自体のセキュリティレベルを上げても、サーバーやログイン情報、ユーザーの管理ができておらず、外部に情報が漏れるようなことがあっては、意味がありません。サイトを安全に運用するためにも、WordPressのセキュリティ対策はもちろんのこと、それも含めた運用ルールの徹底と、定期的な実施状況の確認が不可欠です。これもまた、他のCMSと同じであり、WordPressだけが特別なわけではありません。WordPressに固執する必要はありませんが、WordPressだからこそのメリットもたくさんあります。ここにあげたセキュリティ対策なども参考にして、適切な知識を持って、WordPress導入の可否を冷静に判断しましょう。戦略的なweb制作をお求めなら、私たちベイジにご相談ください。ベイジはBtoBサイトと、採用サイトを得意とし、マーケティング戦略や採用戦略まで踏み込んだコンサル型のweb制作を行っています。成果にこだわるサイト制作をお望みの方、良いweb制作会社がいないとお困りの方は、是非ベイジまでご相談ください。ベイジの会社サイトベイジのBtoBサイト制作ベイジの採用サイト制作サイト制作の相談・お問い合わせベイジは業務システムやSaaSのUX/UIにも力を入れています。この分野のデザインを手掛けている制作会社は極めて少なく、相談できる相手がなかなか見つからないという声をよく聴きます。私たちにご相談ください。ベイジの業務システムUX/UIデザインベイジは通年で採用も行っています。マーケター、ディレクター、デザイナー、エンジニアの全職種を募集しています。ご興味がある方は採用サイトもご覧ください。ベイジの採用サイト記事を書いた人エンジニア野村輝2012年1月入社。システム会社でデータベースの設計やチューニング、基幹システムの開発を4年経験。デザインに興味があったこともあり、自分が持っている知識・技術でデザイナーを裏で支える仕事がしたいと思い、web業界に入る。2012年1月よりベイジに参画。ベイジ社員がお届けする情報発信メディア。