なぜセキュリティ対策が必要なのか
→自分のサイトを守るため&他人に迷惑をかけないため
オープンソース(無料)のCMSであるWordpressは、日本だけでなく世界中で使われていて、その普及率はCMSの中では断とつトップです。
しかも、テーマやプラグインを開発してインターネットで提供できますし、そのドキュメントや使い方なども色々な人たちが情報を発信しているので、Wordpress自体の普及率以上に、インターネット上に広まっていると言えます。
そして重要なのは、広く使われているということはそれだけ不正アクセスのターゲットになりやすい、ということなんですね。
しかも、インターネットは世界中の誰でもアクセスできる空間なので、つまり、ネットで公開しているWordpressサイトは海外のハッカーからもアタックを受ける可能性が高いんです。
「不正アクセスを受けたって別にいいよ。自分のサイトには個人情報やクレジットカード情報のような大事な情報はないし。」
と思った方、その考えはちょっと危険です。
「不正アクセスを受ける」と聞くと、「自分が被害を受けるだけ」という印象が強いかもしれないのですが、実はインターネットの怖いところは、「被害者」であると同時に「加害者」になってしまう可能性が非常に高い、ということなんです。
どういうことかというと、自分のブログやサイトが不正アクセスを受けて不正なプログラムやウィルスを仕込まれてしまうと、その不正プログラム・ウィルスを実行している自分のブログサイトが、他のサイトや訪問者のパソコンを攻撃してしまう、という状況になります。
そういった状況を防ぐためにも、ぜひ、セキュリティ対策を行ないましょう。
このページでは、レンタルサーバーでWordpressサイトを運営している方なら誰でもできるセキュリティ対策を紹介しています。
作業自体はシンプルなものが多いのですが、一度に全てやろうとすると大変なので、是非、少しずつでも実施してみてください。
[adsense]
目次
- 1 WordPressアップデートは必ず行なう
- 2 テーマやプラグインは公式のものを使う
- 3 ユーザー名「admin」は削除する
- 4 パスワードは複雑な文字列にする
- 5 表示名の変更
- 6 投稿者アーカイブの非表示化
- 7 セキュリティプラグイン「SiteGuard WP Plugin」
- 8 Google2段階認証を利用する方法
- 9 キーコードを固有の文字列に変更する
- 10 wp-config.phpのパーミッション(アクセス権限)を変更する
- 11 トップディレクトリにある不要なファイルを削除する
- 12 wp-adminフォルダにベーシック認証を付ける
- 13 wp-content/uploadsフォルダでphp実行を禁止する
- 14 REST APIを無効にする方法
- 15 WAFを利用する
- 16 サーバーのエラーメッセージを非表示にする
WordPressアップデートは必ず行なう
WordPress本体、テーマ、プラグイン、翻訳でアップデートが発生しています。
アップデートの内容自体は、セキュリティ対策だけでなく、バグ修正、機能追加などもありますが、どれも常に最新の状態にするようにしましょう。
アップデートを全て自動更新にする方法
WordPressの初期設定では、自動更新になっているのは「Wordpressコアファイル(マイナーアップデート)」「翻訳ファイル」のみです。
WordPressコアファイル(メジャーアップデート)、プラグイン、テーマは手動更新しないといけませんが、これらを全て自動更新にすることもできます。
≫Wordpressアップデートを自動更新にする方法はこちら
テーマやプラグインは公式のものを使う
公式のテーマやプラグインは厳密に審査を受けており、クリアーしたものだけが公式として利用できるようになります。その審査項目の中にセキュリティ関するチェックもありますので、セキュリティホールが少ない、悪意あるコードが無い、という保証になります。
以前、公式プラグインの中で、セキュリティに関する改善事項が対処されなかったため、公式プラグインから削除されたという事例もありました。
つまり、一度審査を通った後も、何らかのチェックが継続して行なわれている、ということです。
こういったことからも公式テーマ・プラグインを利用することは安心材料と言えます。
ユーザー名「admin」は削除する
「admin」「administrator」「root」といった名前のユーザー名は絶対に利用しないでください。
これらのユーザー名はシステム管理者を表すため、不正ログインの絶好のターゲットになってしまいます。
もしこれらのユーザー名がある場合は、別の名前の管理者権限ユーザーを作成した後、必ず削除しましょう。
【管理者権限ユーザーの新規作成手順】
ユーザー>新規追加をクリックします。
ユーザー名、メールアドレスを入力し、ユーザーグループを管理者にして、「新規ユーザーを追加」をクリックします。
【不要な管理者ユーザーの削除手順】
この新しい管理者アカウントでログインしなおして、ユーザー名「admin」を削除します。
パスワードは複雑な文字列にする
ブルートフォースアタックでは、よく使われそうな文字列をパスワードとして不正ログインを大量に試みます。
そのため、推測できそうな意味のある言葉や単純な単語や数字、自分のサイト名やサイトURLと同じ文字列を使ったパスワードは危険です。
WordPressではユーザー作成時に難解なパスワードを自動生成してくれるので、それを使うか、複雑なパスワードを作成して使いましょう。
【パスワードの変更手順】
ユーザー一覧を表示して、パスワードを変更するユーザー名の「編集」をクリックします。
「パスワードを生成する」をクリックします。
パスワードをメモする、もしくは複雑なパスワードを入力して、「ユーザーを更新」をクリックします。
表示名の変更
WordPressの初期状態では、サイトに表示される投稿者名が「ユーザー名」となっています。
つまり、ログインIDとパスワードのうち、ログインIDを公開してしまっている状態、になっています。
これはちょっと危険な状況なので、サイトの表示される「表示名」を変更しておきます。
投稿者アーカイブの非表示化
WordPressには「投稿者アーカイブページ」というものがあります。
これは、投稿者毎にそのユーザーが投稿した記事の一覧を表示するページなのですが、Wordpressの初期状態ではそのURLに「ユーザー名」が使われています。
これも、つまり、ログインIDをインターネット上に晒してしまっている状態、なので、危険です。
実際にどうやって投稿者アーカイブページ分かるかというと、試しに、以下のURLをブラウザでアクセスしてみてください。
https://サイトURL/?author=1(もしくはhttp://サイトURL/?author=1)
もしこれでURLにユーザー名の入ったページになったら、要対策、です。
※「author=」の後ろの数字を変えていくと、全ユーザーのユーザー名が分かってしまいます。
この対策としては、テーマのfunctions.phpにコードを追記するやり方があります。
この作業ではFTPを使いますので、使ったことがない場合は、以下の記事を参考にしてFTPツールを設定してみてください。
セキュリティプラグイン「SiteGuard WP Plugin」
ここで、Wordpressのセキュリティプラグイン「SiteGuard WP Plugin」を紹介します。
このプラグインはいくつかのセキュリティ対策をお手軽に利用することができる、非常に優れたプラグインです。しかも無料ですので、Wordpressセキュリティ対策を検討するなら、使わない手はないプラグインです。
以下に、ざっと利用可能な機能を挙げてみます。
wp-adminフォルダへのアクセス制限
未ログインのIPアドレスからのアクセスを遮断します。
wp-adminフォルダ以下にあるプログラムへのアクセスを遮断できるので、不正アクセス防止になります。
ログインページ(wp-login.php)の変更
ログインページURLである「wp-login.php」を変更します。
通常、不正ログイン攻撃はwp-login.phpに対してアタックするのですが、そのログインURL自体を変えるので、不正ログイン攻撃自体を受けにくくなります。
画像認証
ログイン時に、ユーザーIDとパスワードの他に、画像認証(画像に表示された文字を入力)が利用できるようになります。
画像認証の文字として「英数字」の他に「ひらがな」が使えるので、海外からの不正ログインに効果を発揮します。
もちろん、画像認証の文字は毎回異なります。
ログイン失敗時のエラーメッセージの無効化
WordPressにログインする時に、ユーザー名、パスワードを入力するのですが、実は、ユーザー名を間違えた時とパスワードを間違えた時で、表示されるエラーメッセージが異なります。
どのように違うかというと、
- ユーザー名を間違えた時 → 「エラー: ユーザー名が無効です。」
- ユーザー名が合っていてパスワードが違う時 → 「エラー: ユーザー名 正しいuser名 のパスワードが間違っています。」
- ユーザー名とパスワードが合っていて画像認証が違う時 → 「エラー: 画像認証が間違っています。」
となっています。
これでは、不正アタックでログインをしようとしている攻撃者に対して「ヒントを出してしまっている」といえます。
「エラーメッセージ詳細無効化」機能では、このエラーメッセージを全て同じ内容にできます。
ログインロック
指定時間に指定回数ログインに失敗すると、指定期間ログイン受付を停止します。
ブルートフォースアタックではプログラムで不正ログインしようとするため、機械的な攻撃の防御になります。
ログイン通知メール
誰かがログインすると、「ログインがありました」メールが管理者に送信されます。
不正ログインを気づきやすくするための機能です。
フェールワンス機能
正しいログインID、正しいパスワードを入力しても、1回目はログイン失敗する機能です。
つまり、2回続けて正しい情報でログインしないとログインできない、ということになるので、不正アタックには非常に効果があります。
XMLRPCを無効にする方法
XML-RPCとは、ざっくりいうと、「ログイン画面以外の方法でWordpressにログインする方法」です。
プログラムを使って記事投稿したり、スマホなどのアプリで記事投稿したりする場合に、このXMLRPCを使っている場合があります。
普段パソコンから、Wordpressの管理画面にログインして記事投稿などしている場合は、無効にしても問題ないと思いますので、無効にしておきましょう。
もし、よくわからない場合は一旦XMLRPCを無効にしてみて、記事投稿などに不具合が出た場合に、再度有効化してもよいと思います。
もう少し詳細に書いた記事はこちらです。
≫WordpressでXMLRPCを無効化
ログイン履歴のログ取得
ログイン失敗も含めたログイン履歴が閲覧できます。
日時、結果(成功・失敗・ロック・フェールワンス)、ログイン名(入力されたユーザーID)、タイプ(ログインページ・XMLRPC)などを見ることができます。
「SiteGuard WP Plugin」はこれらの機能が無料で使えるので、ぜひインストールしておきましょう。
≫「SiteGuard WP Plugin」設定方法はこちら
Google2段階認証を利用する方法
WordPress公式プラグイン「Two Factor Authentication」を使います。
設定方法などはこちらをご覧ください。
≫Google2段階認証が使えるプラグイン「Two Factor Authentication」の設定方法
キーコードを固有の文字列に変更する
wp-config.phpには8つのキーコード、salt値が設定されています。
デフォルト(wp-config-sample.php)では以下のようの文字列になっています。
define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here');
これらをそれぞれ別の文字列に変更しておきます。
以下のURLで自動生成してくれるのでそれを使うのがよいです。
WordPress.org の秘密鍵サービス
ftpでwp-config.phpをダウンロードし、上記の箇所を書き換えてアップロードします。
この作業を実施した直後は、現在ログイン中のユーザーが一旦強制ログアウトされます。
wp-config.phpのパーミッション(アクセス権限)を変更する
WordPressの色々な設定項目が記述されているwp-config.phpの、アクセス権限を管理者のみに変更します。
FTPを使って変更できます。
以下の手順はFilezillaを使った例です。
まずFTPでサーバーにログインします。
wp-config.phpを選択して右クリックし「ファイルのパーミッション」をクリックします。
「400」と入力して、「OK」をクリックします。
これで完了です。
トップディレクトリにある不要なファイルを削除する
WordPressをインストールしたディレクトリにあるファイルのうち、使わなさそうなものは削除しておきます。
ざっと以下のファイルは削除できます。
/license.txt(ライセンス)
/readme.html(説明書)
/wp-activate.php(ユーザーを追加した際の確認ページ)
/wp-comments-post.php(コメント投稿用)
/wp-config-sample.php(設定ファイルサンプル)
/wp-links-opml.php(リンクのOPMLXML出力用)
/wp-mail.php(メール投稿用)
/wp-signup.php(ユーザー登録。一人で運営する場合は不要です。)
/wp-trackback.php(trackback、ping送信用)
wp-adminフォルダにベーシック認証を付ける
wp-adminフォルダにベーシック認証を付けるには
・wp-adminフォルダに.htaccessを設置する
・パスワードファイルを設置する
の2つの作業が必要です。
まず、htaccessを用意します。すでにある場合は追記します。
<Files admin-ajax.php> Satisfy any allow from all </Files> AuthUserFile /パスワードファイルへのパス/.htpasswd AuthName "Please enter your ID and password" AuthType Basic require valid-user
次にパスワードファイルを用意します。
パスワードは暗号化する必要がありますので、以下のサイトなどで暗号化しましょう。
それを.htpasswdというファイル名で保存します。
2つのファイルを用意できたら、.htaccessはwp-adminフォルダへアップロードし、.htpasswdは任意の場所にアップロードします。(DocumentRootより上の方がよいです。)
wp-content/uploadsフォルダでphp実行を禁止する
画像やメディアをアップロードしておくフォルダ「uploads」で、phpプログラムが実行されないように設定しておきます。
具体的には、禁止設定を書いた.htaccessというファイルを作って、FTPを使ってuploadsフォルダにアップロードします。
ただし、Windowsパソコンの場合は、「.htaccess」というファイル名のファイルは作成できませんので、一旦「htaccess.txt」(先頭のドット「.」は無し)というファイルを作ってFTPでサーバーにアップロードして、FTPを使ってファイル名を「.htaccess」に変更します。
.htaccessファイルを作ってアップロードする手順
パソコンでテキストエディタを開き、以下のコードを記述します。
<Files *.php> deny from all </Files>
ファイル名を「htaccess.txt」として保存します。
FTPでサーバーにログインして、wp-content/uploads/フォルダに「htaccess.txt」をアップロードします。
「htaccess.txt」を選択して右クリックし、「名前の変更」をクリックします。
ファイル名を「.htaccess」と入力して「OK」します。
REST APIを無効にする方法
REST APIとは、Wordpressの記事やデータに、プログラムでアクセス可能にするための機能です。
そのため、XMLRPCと同様に、不正アクセスの攻撃対象となりえますので、無効にしておきます。
プラグイン「Disable REST API」
公式プラグイン「Disable REST API」を使うと、未ログインユーザーのREST APIアクセスを禁止できます。
≫REST APIを無効にするプラグイン「Disable REST API」の設定方法
functions.phpに設定する方法
REST APIを使っている機能やプラグインもあるので、一律に禁止してしまうとそれらを利用できなくなります。
そこで、なるべく影響が出ないような形で設定する方法の紹介です。
以下のコードでは、「oEmbed」「Contact form 7」は許可しています。
function sbh_deny_restapi_except_embed( $result, $wp_rest_server, $request ){ $namespaces = $request->get_route(); // /oembed/1.0 if( strpos( $namespaces, 'oembed/' ) === 1 ){ return $result; } //contact form 7 (Ver4.7~) if( strpos( $namespaces, 'contact-form-7/' ) === 1 ){ return $result; } return new WP_Error( 'rest_disabled', __( 'The REST API on this site has been disabled.' ), array( 'status' => rest_authorization_required_code() ) ); } add_filter( 'rest_pre_dispatch', 'sbh_deny_restapi_except_embed', 10, 3 );
上記のコードをテーマファイルのfunctions.phpに追記すればOKです。
こちらのサイトを参考にさせていただきました。
≫WordPress4.7 の WP REST API を無効にする – ねんでぶろぐ
WAFを利用する
WAFとは「Web Application Firewall」の略で、その名のとおり、Webアクセスをチェックするファイヤーウォールです。
レンタルサーバーの場合は、レンタルサーバー会社が提供してくれているので、機能が有効になっているかどうか確認しましょう。
WordPress利用におすすめの「エックスサーバー」は、以前はWAFがなかったのですが、2018年7月に提供開始されました。
それ以前からエックスサーバーを利用している方は、初期設定ではOFFになっているので、ONにしておきましょう。
エックスサーバーでWAFを設定する手順
サーバーパネルにログインし、右下にある「WAF設定」をクリックします。
WAFをONにしたいドメイン欄にある「選択する」をクリックします。
各設定項目の「ONにする」をクリックします。
「WAFがないからエックスサーバーは避けてたんだ」
という方も、今ならもうエックスサーバーおすすめです。
サーバーのエラーメッセージを非表示にする
php、MySQLのエラーメッセージにはアタックの足掛かりになるような情報が表示されることがありますので、ブラウザにエラーメッセージを表示させないようにします。
レンタルサーバーの場合、サーバー管理画面(エックスサーバーならサーバーパネル)に「php.ini設定」というような項目があります。その中に、以下の項目がありますので、それぞれ「OFF」にしておきます。
display_startup_errors
display_errors
【WPサポート】WordPressの保守サポート、設定代行をいたします。こちらからお問い合せください。
コメント