ベイジでエンジニアをしている野村です。
ベイジには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で十分、ということになるかと思います。
エンジニアではない方でも真似できるよう、実現方法もできるだけ優しく解説しています。是非参考にしてみてください。
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
WordPressやプラグインのセキュリティホールはたびたび報告されていますが、その都度パッチが公開されています。セキュリティホールをついた攻撃を未然に防ぐためにも、WordPressやプラグインは常に最新版であることが望ましいです。
WordPressや使用しているプラグインの新しいバージョンが公開されると、管理画面に通知されるようになっています。気づいたら最新版にアップデートし、攻撃に対処しておきましょう。
使用していないプラグインを残しておくと、そのプラグインのセキュリティホールを攻撃されることもあります。確率としてはそれほど高くはないですが、攻撃の可能性を少しでも減らするため、使用していないプラグインもこまめに削除しておきましょう。
WordPressサイトの攻撃の多くは、ログイン画面に対しておこなわれます。それ故に、ログイン画面のURLを、デフォルトのものから変更していないと、一斉攻撃の対象になりやすいです。逆に言えば、URLを変更してログイン画面自体を簡単に見つけられないようにするだけで、攻撃対象になるリスクを軽減できます。
ログイン画面のURL変更は、「SiteGurad WP Plugin」プラグインで実現できます。
ログイン画面のURLを変更するだけでなく、Basic認証も設定して、ログインを二重にすることでセキュリティを高めることができます。
ログイン画面にBasic認証を設定するには、パスワードファイルをサーバーにアップロードして.htaccessへBasic認証の設定を追記します。
<Files wp-login.php>
AuthUserFile /[.htpasswdまでのディレクトリ]/.htpasswd
AuthGroupFile /dev/null
AuthName "Protected Area"
AuthType Basic
require valid-user
</Files>
ログイン画面にアクセスできる場所をIPで限定することで、不特定多数のログイン画面へのアクセスを防ぎます。
ログイン画面にIP制限を設定するには、.htaccessへIP制限の設定を追記し、サーバーにアップロードして完了です。
なお、IP制限を設定すると、例えばリモート環境からはアクセスできなくなってしまうため、運用上の問題がないかは、事前に確認しておきましょう。
<Files wp-login.php>
order deny,allow
deny from all
allow from [許可するIP]
</Files>
攻撃者はパスワードを自動生成して何度も管理画面のログインを試行してきます。(ブルートフォースアタックといいます)
ログインを突破されることがなくても、アクセスが増えることで、サーバーに対する負荷もかかり、画面の表示が遅くなるなどの問題も発生します。その攻撃を防ぐためには、ログインに一定回数失敗したとき、その接続元から一定時間ログインできないようにすることが効果的です。
ログイン回数の制限は、「SiteGurad WP Plugin」というプラグインで実現できます。
攻撃者は、自動プログラムによるなりすましを行うことがあります。ログイン時に人の目による画像認証を入れることで、機械によるなりすましを防ぐことができます。
画像認証は、「SiteGurad WP Plugin」プラグインで実現できます。
設定ファイルの不正な更新を防ぐためにもファイルに対するアクセス権限は適切に設定しておきます。これも、.htaccessの設定で可能です。
パスワードが、サイトや企業などの情報から推測しやすいもの、管理者の名前、一般的に使用されているパスワードであると、攻撃者による不正なログインの原因となる可能性があります。例えば以下のようなパスワードは、できるだけ避けるようにしましょう。
不正ログインをさせないためにも、WordPressの「パスワードを生成する」機能で生成した複雑なパスワード使用することをオススメします。
一つのユーザーを複数人で共用していると、運用を続けているうちに、退職者なども含めて、どこの誰がログインできるのかがわからなくなってしまいます。
そこで、利用者分のユーザーを作成して、さらに管理画面の操作できる範囲の権限を各ユーザーごとに設定しておきましょう。利用者が退職したとき、または部署変更などで管理画面を利用することがなくなった場合は、その人が使用していたユーザーを削除します。
ユーザーを共有すると、記事の新規追加や編集したユーザーも特定できなくなるため、運用面から見ても、ユーザーは個別に設定すべきでしょう。
データベース(MySQL)をブラウザから操作できるphpMyAdminはとても便利ですが、WordPressのキモとなるデータベースを外部から操作できる状況をそのままにしておくことは極めて危険です。
不正なアクセスをIP制限やBasic認証を設定して防ぐ方法もありますが、そもそも運用時にphpMyAdminを使用しないのであれば、サーバーからphpMyAdminに関するディレクトリやファイルは削除しておきましょう。
今回紹介した対策を実施すれば、WordPressに対するほとんどの攻撃を防ぐことができます。多くの企業にとって、このレベルを超える攻撃にさらされることはほとんどないはずです。
ただ、このようにWordPress自体のセキュリティレベルを上げても、サーバーやログイン情報、ユーザーの管理ができておらず、外部に情報が漏れるようなことがあっては、意味がありません。
サイトを安全に運用するためにも、WordPressのセキュリティ対策はもちろんのこと、それも含めた運用ルールの徹底と、定期的な実施状況の確認が不可欠です。
しかしこれもまた、他のCMSと同じであり、WordPressだけが特別なわけではありません。WordPressに固執する必要はありませんが、WordPressだからこそのメリットもたくさんあります。ここにあげたセキュリティ対策なども参考にして、適切な知識を持って、WordPress導入の可否を冷静に判断しましょう。
ウェブ制作といえば、「納期」や「納品物の品質」に意識を向けがちですが、私たちはその先にある「顧客の成功」をお客さまと共に考えた上で、ウェブ制作を行っています。そのために「戦略フェーズ」と呼ばれるお客さまのビジネスを理解し、共に議論する期間を必ず設けています。
成果にこだわるウェブサイトをお望みの方、ビジネス視点で相談ができるウェブ制作会社がいないとお困りの方は、是非ベイジをご検討ください。
ベイジは業務システム、社内システム、SaaS、管理画面といったウェブアプリケーションのUIデザインにも力を入れています。是非、私たちにご相談ください。
ベイジは通年で採用も行っています。マーケター、ディレクター、デザイナー、エンジニア、ライターなど、さまざまな職種を募集しています。ご興味がある方は採用サイトもご覧ください。