4.6WordPressは全世界で使用されている有名なソフトウェアであることもあり、攻撃されやすいソフトウェアのひとつです。攻撃する側としては多く使われているソフトウェアの攻撃手法を見つけられれば少ない労力で多くのサイトを狙うことができるので、「多く使われているソフトウェアほど攻撃されやすい」ということがよく起こります。(Windowsなどもそうです)本レシピでは、WordPressのセキュリティを高めるためにどのようなことをするとよいか、侵入(不正ログインによるハッキングなど)を防ぐ対策を主として紹介します。攻撃のパターン一般的に、WordPressのようなCMS(Webページなどのコンテンツを管理するシステム)の攻撃のパターンとしては下記のようなものがあります。任意のファイルをアップロードできる脆弱性があり、PHPファイルをアップロード→実行により改ざんされたりデータを盗まれる)3FTP、SSHなどサーバー側のログインID・パスワードが破られるか盗まれるかなどで不正ログインされる4サーバーの他のソフトウェアに脆弱性がある・またはサーバーに起因する別の要因により攻撃されるこのため、上記の原因になる問題を解消できれば、最低限セキュリティが保たれるということになります。(レンタルサーバーを使用している方向け)上記を踏まえ、レンタルサーバーを使用してWordPressを運用している方の場合の対策の例を紹介します。(下記の条件を満たすサーバーで、サーバー側のセキュリティは保たれている前提です。余裕があればしておくとよいこの項目は、主に「侵入の入口をふさぐ」を目的としたものです。Webセキュリティの専門家である徳丸浩さんが「WordPressの侵入対策は脆弱性管理とパスワード管理を中心に考えよう」で述べられてていますが、「WordPressのテーブルの接頭辞を変える」などは攻撃が成功してしまったあとの被害軽減を目的としたものになるので、労力と効果を考えるとそのような対策を取る前に「まずは入らせない」ということが必要になってくると思います。下記以降、解説が少し長いため、必要そうなもののみかいつまんで見ていただけるとよいと思います。出来る限り2016年時点でのまっとうな説明になるよう心掛けていますが、もし不備などがあればお知らせください。(ロリポップ)」の3つのレンタルサーバーの説明を記載しています。(多くの人が参考にしやすいと思われる)」の2点で選定しており、利益関係はありません。WordPress本体やプラグイン、テーマのバージョンを最新の状態に保つWordPressやプラグイン、テーマは絶えず更新が続けられており、その間に脆弱性が見つかったり、新しい脆弱性が生まれることもあります。WordPress」で「セキュリティリリース」となっているものは何らかの脆弱性が修正されたことを示していますが、古いものは新しいものに比べてそういった脆弱性が残っているということですので、最新状態にしておくことは特に意味のあるセキュリティ対策になります。WordPressでは、セキュリティやメンテナンスでの修正があった場合(バージョン4.6から4.6.1など、3桁目の番号が上がるとき)は管理者が何もしなくても自動更新が行われる仕組みがあります。機能追加(1桁目や2桁目の番号が上がるとき)は標準では自動で更新されませんし、プラグインやテーマも自動では更新されませんので、管理画面に表示される更新通知を確認して更新することが必要になります。安易にプラグインやテーマをインストールしない品質のよくないWordPressのプラグインやテーマをインストールしてしまうと、そこから攻撃されてしまう可能性があります。厳密にはセキュリティ上の問題がないかすべてのコードを確認する必要がありますが、そこまでの労力をかけていると大変なので、最低限下記のいずれかに当てはまるプラグインやテーマはインストールするのをできるだけ避けたほうがよいです。(ダウンロード数が少ないなど。(長く、ランダムな、英数字(大文字小文字)と記号を使用したもの)長く、ランダムで、英数字(大文字小文字)と記号を使用したパスワードを設定していれば、攻撃プログラムからのパスワード解析が困難になり、不正ログインされる可能性が大幅に下がります。WordPressにはパスワードの強度チェックを行う仕組みがあるので、「強力」と表示されるのを目安にパスワードを設定するとよいです。(ユーザーの追加画面にあるパスワード欄。(FTPS・SFTPを使用する)テーマのファイルなどをサーバーにアップロードするのにWindowsを使用されている方であればFFFTPやFileZillaなどのFTP接続ソフトを使用している方が多いと思いますが、FTPは通信が暗号化されていないため、通信の途中でパスワードが第三者に見られる可能性があります。通信が暗号化されている下記の方式でサーバーにアクセスすることで、パスワードが漏洩する可能性を下げられます。使われているSSLで暗号化する仕組み。SSHという暗号化通信接続の仕組みを流用して、SSHの通信上でFTPと同じような操作を行えるようにした仕組み。FTP)(FFFTPであればFTPS、FileZillaであればFTPSとSFTPが使用できます)通信方式はレンタルサーバーによって対応している方式が違うため、公式の機能一覧やマニュアル等を参照してください。管理画面やログイン画面をSSL化する4.と同じように管理画面やログイン画面も通常の状態では通信が暗号化されていないため、パスワードを入力した際に通信の途中でパスワードが第三者に見られる可能性があります。インターネットでお買い物をするときクレジットカードを入力する画面などで必ず通信が暗号化されているのと同じように、管理画面やログイン画面上の通信をSSL(HTTPS通信)で暗号化することでパスワードが漏洩する可能性を下げられます。サーバー側はレンタルサーバーによって設定方法が違うため、お使いのレンタルサーバーのマニュアル等を参照してください。WordPress上での設定方法は下記に記載があります(※1)。日本語版ただ、SSL化についてはSSL化のための証明書が基本的には有料のため敷居が高かったり(※2)、レンタルサーバーで独自SSLに対応していない場合がある(※3)ので、状況によっては難しい場合があります。説明がわかりづらい部分があるため、将来的に本サイトで別途説明を作成するかもしれません。エックスサーバーの場合、独自SSLを無料で利用できる設定があります。レンタルサーバー【エックスサーバー】。スタンダードなどでは独自SSLが使用できませんでした。管理画面やログイン画面にアクセス制限を掛ける管理画面やログイン画面に管理者しかアクセスできないようになっていれば、そもそも不正ログインはほぼ起こりません(家のドアや窓自体に辿りつけなければ侵入されることがないのと同じ理屈)。WordPressには会員制サイトを作るなどの目的のために「だれでもユーザー登録ができるようにする」という機能がありますが、そういった仕組みが不要であればアクセス制限を掛けるとよいです。制限の種類としては、1つは「管理画面やログイン画面に国外からはアクセス出来ないようにする」です。一般的に攻撃は海外から行われることが多いこと、日本の方がWordPressを管理するのはたいてい国内であることを考えると、これはわりと効果が高いです。最近のレンタルサーバーでは「国外IPアドレス制限」という機能が備わっていることがあり、サーバーの管理画面で手軽に設定ができます。さくらのサポート情報もう1つは「管理画面やログイン画面に管理者のIPアドレス以外ではアクセス出来ないようにする」です。これは可能ならとてもよい方法ですが、IPアドレスは固定IPアドレスの回線を使っていない場合変動するため、「設定した」→「ログイン画面に入れなくなった!」→「自分の回線のIPアドレスが変わっていた...」ということが起こります。(「外出先などでログイン」などもできなくなる)もし「固定IPアドレスの回線を使っている」などでそういう問題がクリアできるのであれば、下記のように設定ができます。(Apacheが動作している、.htaccessが使用できる一般的なWebサーバーの場合)(ログイン画面のアクセス制限。必要なIPアドレス</Files>(管理画面のアクセス制限。.htaccessが無い場合は作成してください。ような形式で、「アクセス情報【使用中のIPアドレス確認】」などで確認ができます。フォルダに制限を掛ける場合、wp-admin内にあるadmin-ajax.phpはテーマやプラグインが公開側で利用していることがあるため、このファイルは対象から外すようにすることが勧められています。ファイルのパーミッションを変更する「WordPressの侵入対策は脆弱性管理とパスワード管理を中心に考えよう」では、特に共用のレンタルサーバーではファイルのパーミッション(操作権限)を適切に変更することが勧められています。(ロリポップで2013年に発生した大規模攻撃。ありますので、できれば初期状態から変更しておくとよいと思います。各レンタルサーバーにもパーミッションの変更を勧める文書があります。ロリポップ!レンタルサーバー」)パーミッションの推奨値は下記のとおりです。(1)」を組み合わせた値になっています。「604」は「所有者は読み取り(4)・書き込み(2)ができ、同じグループのユーザーは何もできず、その他のユーザーは読み取り(4)のみできる」という意味です。(厳密には2016/09時点で未検証ですが)WordPressの自動更新によってパーミッションが元に戻ってしまったりする場合もあると思いますので、.htaccessやwp-config.phpなど重要なファイルを重点的に厳しいパーミッションにするとよいのかなと思います。ログイン画面の機能を強化するこれは「家に入られないためにドアを頑丈に(高機能に)する」ようなアプローチで、できればしておくと安全性を高めることができます。6のIPアドレス制限で「そもそも扉に完全に辿りつけない」ようになっていれば原理的には必要ありませんが、6で100%アクセスを防ぐことは難しい場合が多いので、対策をしておくとよいと思います。Plugin」はよい選択肢だと思います。(ログインが成功していないアクセス元は管理画面にアクセス出来ないようにする。管理画面やログイン画面にBasic認証など別の方式の認証の仕組みを導入するこれは「家のドアに新しく鍵をもう1つ付ける」ようなアプローチです。Authenticator」(スマートフォンと連携した二段階認証)などがあり、対応するWordPress用プラグインなどもたくさんあります。プラグイン自体の安全性がどれだけ確保できているかという別の問題もあるので、Basic認証を手動で設定するのが手軽ではと思います。(管理画面やログイン画面をSSL化していないとBasic認証のパスワードも暗号化されないので、その点は留意してください)Basic認証はレンタルサーバーによってはサーバーの管理画面から手軽に設定することができます。レンタルサーバー各社のパーミッション推奨値を追加するなど一部調整を行いました。侵入を防ぐ」にタイトルを変更しました。レンタルサーバーならロリポップ!わからない単語がある場合は下記が参考になるかもしれません。挙げられている対策について、現在(2016年時点)の有効性を記載しているものです。侵入のヒントを隠す侵入のヒントになり得る各種情報(ソフトウェアのバージョンなど)を隠すことはあまりよい対策とはされていないことが多いです。コメントをキャンセル内容の誤りなどがありましたら下記からご連絡をお願いします。頂いたコメントは基本的に公開されることはありません(必要な場合は個別に返信させて頂きます)。次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。