2022年版、WordPress(ワードプレス)のセキュリティ設定マニュアル
執筆者:川原裕也 更新:
※記事内に広告を含む場合があります
WordPress(ワードプレス)は、世界中のブログ・サイト構築システムとして使われています。
最近では、個人ブロガーの方でもWordPressを使って自身のブログサイトを構築していることが多いです。
WordPressがここまで普及した背景には、無料で使えることと、誰でも手軽に導入できることがあげられます。
一方で、普及にともない、セキュリティ的に問題のある状態で放置されているサイトも増えているように思います。
WordPressを使って、せっかく自分だけのブログサイトを作ったのに、サイト改ざんなどのトラブルに見舞われてしまう。それほど悲しいことはありません。
この記事では、私自身が導入しているWordPress(ワードプレス)のセキュリティ対策方法をまとめます。
もし、「こういう方法も追加したほうがいいよ」というアドバイスがありましたら、コメントにて教えていただけると助かります。
この記事を通じて、少しでも多くの人が安全・安心なWordPressサイトを構築できることを願っています。
目次
メジャーアップデートの自動更新を有効にする
記述する場所:function.php
// *******************************************************
// メジャーアップデートの自動更新
// *******************************************************
add_filter( 'allow_major_auto_core_updates', '__return_true' );
WordPressは定期的にアップデートされています。
アップデートによって、指摘を受けた脆弱性が修復されるため、メジャー・マイナーに限らず常に最新のバージョンにしておくことをおすすめします。
WordPressはデフォルトの設定で、マイナーアップデートの自動更新はONになっていますが、上記のコードをfunction.phpに記述することで、メジャーアップデートの自動更新にも対応できます。
管理するサイト数が増えると、サポートされない古いバージョンのWordPressがそのまま放置されることも考えられます。
特別な理由がない限りは、常に最新バージョンのワードプレスを使うのが望ましいため、メジャーアップデートの自動更新もONにしておくのがおすすめです。
function.phpへの記述を間違えると、WordPressの管理画面にアクセスできなくなってしまう恐れがあります。
事前にバックアップを取ってから作業を行ってください。
もし、function.phpへの記述間違いが原因で管理画面にアクセスできなくなった場合、作業前のfunction.phpファイルをFTPなどでアップしてください。
function.phpを元の状態に戻せば、再びアクセスできるようになります。
テーマ・プラグインの自動更新を有効にする
記述する場所:function.php
// *******************************************************
// テーマ・プラグインの自動更新
// *******************************************************
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
WordPressの拡張機能であるプラグインはたいへん便利なものです。
しかし、数多くのプラグインをインストールしていると、セキュリティ上の欠陥が発生するリスクも高まります。
もし、プラグインに脆弱性があっても、頻繁に更新されているプラグインであれば、開発者がすぐに対応してくれる場合がほとんどです。
この場合、脆弱性が修正された最新バージョンを自動的に取り込めるよう、テーマ・プラグインの自動更新もONにしておくことをおすすめします。
特に、プラグインは頻繁に更新されるため、手動で更新するのは大変です。自動更新をONにすることで、サイトの運用効率もアップすることができます。
また、長期にわたり利用しないプラグインは停止・削除しておくことも重要です。
WordPressのバージョン情報を削除する
記述する場所:function.php
//---------------------------------------------------------------------------
// WordPressのバージョン情報を削除する
//---------------------------------------------------------------------------
remove_action('wp_head', 'wp_generator');
ワードプレスでは、初期設定でhead内にバージョン情報が記載されるようになっています。
バージョンをHTMLソースコードに含めるということは、言い換えるならば「私は脆弱性のあるWordPressを使っています、どうぞ狙ってください」と言っているようなもの。
バージョン情報の記述を削除しておくだけで、攻撃を受けるリスクは大きく下がります。
この設定は、後ほど紹介するセキュリティプラグイン「All In One WP Security & Firewall」でも行えます。
wp-includesフォルダへのアクセス制限
記述する場所:.htaccess
#wp-includesフォルダへのアクセス制限
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
wp-includesフォルダへのアクセスを制限しても、運用には支障がありません。
.htaccessフォルダはWordPressのトップディレクトリ(一番上のフォルダ)にあります。
もし、.htaccessへの記述をミスして、サイトにアクセスできなくなっても焦らないでください。作業前の.htaccessファイルをFTPなどからアップし、元の状態に戻せば再びアクセスできるようになります。
作業ミスに備え、作業前に.htaccessのバックアップをとるようにしてください。
wp-content/uploadsでのPHP実行禁止
記述する場所:wp-content/uploads 内に.htaccessを作成し、そこに記述
# wp-content/uploadsでのPHPの実行を制限
<files *.php>
deny from all
</Files>
サイトがハッキングされると、メディアライブラリにPHPファイルなどのプログラム実行ファイルを設置される可能性があります。
サイト上でユーザーが画像を投稿できるような仕組みを構築している場合も同様です。
WordPressのメディアライブラリでPHPを実行できないようにするため、wp-content/uploads 内に.htaccessを新規作成し、そこに上記のコードを記述しておきます。
適切なパーミッションの設定
WordPressのファイル・フォルダには適切なパーミッションの属性値を設定し、アクセス制限をかけておきます。
パーミッションの変更は、レンタルサーバーならFTPツールなどを使って行います。
WordPressにおける最適なパーミッションの設定値にはいくつかの意見があるかと思いますが、私は下記のように設定しています。
- .htaccess
- 604または606(特に理由がなければ604)
- wp-config.php
- 400(400が無理な場合は600でも可)
- その他ディレクトリ(フォルダ)
- 705
- その他ファイル
- 604
パーミッションの変更を間違えると、場合によってはサイトが表示できなくなったり、ワードプレスの管理画面にアクセスできなくなります。
上記の方法であれば、特に運用に支障はきたさないはずですが、初心者の方は1つずつ不具合が生じないか確認しながら作業してください。
ちなみに、
- readme.html
- wp-cofig-sample.php
- license.txt
は削除しても問題ありません。パーミッション変更と合わせて削除しておくことをおすすめします。
All In One WP Security & Firewallを使う
WordPressでは、多くの強力なセキュリティプラグインが無料で提供されています。
その中でも、私が特におすすめしているのは「All In One WP Securyty & Firewall」というプラグインです。
これまで紹介してきたセキュリティ対策の他にも、やるべきことはたくさんあります。
このプラグインを使うことで、セキュリティ対策としてやらなくてはならない作業を効率化できます。
All In One WP Securyty & Firewallの画面はすべて英語で、日本語版はありません。しかし、ブラウザの翻訳機能などを使えば英語が苦手な方でも問題なく使えると思います。
現在のセキュリティレベルがどれくらいか、スコアで表示してくれる機能もあるので、ハイスコアを目指してセキュリティを強化するのも良いと思います。
All In One WP Securyty & Firewallの使い方とおすすめの設定方法は、別記事で解説しています。下記も合わせてご覧ください。
ユーザー名をadmin以外にする
WordPressでは、インストール初期値のユーザー名が「admin(アドミン)」になっています。しかし、adminは最も狙われやすいユーザー名なので、これを任意のものに変更しておきます。
admin以外であれば、ユーザー名はなんでも構いませんので、覚えやすいものにしておきましょう。
また、あわせてWordPressの「ブログの表示名」をユーザー名以外のものに変更します。
WordPressの初期設定では「ユーザー名 = ブログの表示名」になっているので、ブログ投稿者の名前などが記事内に表示されていると、そこから「ユーザー名」がバレてしまいます。
1.インストール時にadmin以外を選択する
adminというユーザー名は狙われやすいため。ここでは、ユーザー名をyamadaとする。
2.ブログの表示名を変更する
初期設定では、ブログの執筆者名にそのままyamadaと表示されてしまう。これを避けるために、「ブログの表示名」を「山田太郎」のようにする。
ブログの表示名を任意のものに変更しておくと、外部からはログイン名を知られることがなくなる。
ブログの表示名は、WordPressにログインし「あなたのプロフィール > ブログの表示名」から変更する。
常時SSL化する
最近のウェブサイトは、常時SSL化(常時https化)が主流になっています。
SSL化することで、サイト訪問者とサイトを設置しているサーバーの間に生じる通信が暗号化され、機密性が保たれます。
すべてのページをSSL化することは、グーグルが推奨していることから、SEOにおいても有利であると言われています。
また、Chromeブラウザをはじめ、最近のウェブブラウザではSSL化されていないサイトに対して「保護されていないサイト」などの警告を出すようになっています。
最近は、レンタルサーバー会社のほとんどが、Let’s Encryptなどの無料で使える認証局のSSL証明書をサポートしています。(無料でサイトをSSL化できます)
レンタルサーバーの設定で「サイトをSSL化する」を選択すれば、ほぼ自動でSSL化の作業を実行してくれるので、初心者の方にとっても、常時SSL化のハードルは格段に下がっています。
サイトの信頼性を高めるためにも、常時SSL化は行っておきましょう。
複雑なパスワードを使う
前述した「All In One WP Security & Firewall」でセキュリティ設定をしておけば、ログインロックをかけられるので、パスワード突破の可能性は減るはずです。
とはいえ、あまりに簡単過ぎるパスワードはログインされてしまう危険性があるので、WordPressのログインパスワードは、できるだけ複雑なものにしておきます。
外部の人が連想できるものや、「1234」などの誰でも想定できそうなものは避けましょう。
WordPressのパスワードは、数字、英語の大文字、小文字、記号がすべて使えます。これらをすべて含んだパスワードを使います。
理想は、「あなたのプロフィール > 新しいパスワード > パスワードを生成する」によってWordPressが自動生成したものを使うことです。
また、プロフィール画面のパスワード設定欄では、そのパスワードが強力かどうかを判定してくれるツールが提供されています。
可能であれば、2段階認証も設定しておくと、さらにWordPressのセキュリティを強化できます。
海外からはログインページへのアクセスを遮断する
海外のIPアドレスからは、ログインページ(ログイン画面やダッシュボードなど)にアクセスできないようにします。
最近は、ほとんどのレンタルサーバー会社で、このようなサーバー設定ができます。
これらのサーバー会社は、こうした設定ができることを確認しています。
ログインページに対して、国外IPアドレスからのアクセスを遮断しておくことで、サイトの表側(コンテンツ)などは海外からでもアクセスできますが、サイトの裏側(記事編集エリアなど)には、海外からアクセスできなくなります。
海外旅行中に、旅先でWordPressにログインするときに、設定を解除しなければなりませんが、通常はこれを設定しておくことで強力なセキュリティになります。
海外からでもログインページにアクセスできる場合、ブルートフォースアタック(総当たり攻撃)が結構な確率で飛んできます。
逆に、海外からログインページへのアクセスを制限しておくと、ブルートフォースアタックの危険性は格段に下がります。
大量のID・パスワードをランダムに入力することで、ログインページを強引に突破する攻撃方法です。
ログインページにアクセス制限をかけておかないと、脆弱なパスワードは突破されてしまう危険性があります。
一定回数ログインに失敗すると、制限をかけるなどの対策が必要です。
前述した、All In One WP Securyty & Firewallを使うことでも、ログイン制限の機能を設定できます。
定期的にログイン履歴を確認する
この記事で取り上げた「All In One WP Security & Firewall」や「Crazy Bone」といったプラグインでは、ログイン履歴を確認できます。
「いつ、誰がどのIPアドレスからログインしたか。」
「どのユーザー名でログインに失敗したか」
ログイン履歴を確認できる機能を付けておくことで、身に覚えがないログインを察知できます。
また、ログインに失敗したものの、ログインを試みようとした悪意のあるユーザーのIPアドレスを知ることができるので、こうしたユーザーはブロック対象にすることもできます。
その他、ログインには失敗したが「yamada」というユーザー名で何度もログインを試みている場合、何らかの形でユーザー名が知られていることになります。
このような場合は、ユーザー名を変更するなど、予防策を取ることでハッキングを未然に防ぐことができます。
Google サーチコンソールへの登録
Google サーチコンソールは、検索エンジン大手のグーグルが提供している、サイト運営者向けのツールです。
サイト運営に役立つ様々なデータを提供してくれるため、ブロガー・サイト運営者ともに登録は必須と言ってよいでしょう。
Google サーチコンソールに登録しておくと、サイトがもしマルウェアなどに感染している場合、メールで通知してくれます。
定期的な自動バックアップ
もし、サイトがハッキングされてしまったり、マルウェア感染の被害にあってしまった場合に備えて、定期的にバックアップをとっておくことをおすすめします。
▼代表的なWordPressのバックアッププラグイン
どちらも優れたプラグインですが、初心者の方でもより簡単に復旧できるのは、All-in-One WP Migrationです。
BackWPupは無料で、Dropboxなどのオンラインストレージにバックアップできます。
All-in-One WP Migrationでオンラインストレージにバックアップするためには、別途、有料のエクステンションの購入が必要です。
有料のエクステンションはすべて、99ドル(1回だけ支払えば永久ライセンス)なので、サイト・ブログの運営に資金を投じる余裕があれば、これらのエクステンション購入もおすすめです。
有料エクステンションは、All-in-One WP Migration開発元のServMaskにて購入できます。
これらのバックアッププラグインは、スケジューリングができ、定期的にWordPressのバックアップを自動作成してくれます。
バックアップを取っていても、そのバックアップ自体が「感染後のバックアップ」だと意味がありません。
バックアップは定期的に行い、作成したバックアップのうち、過去数ヶ月~数年程度のものをいくつか残しておくのがおすすめです。
安全なサイトを作るために
この記事で紹介してきたセキュリティ対策は、すべてが私のオリジナルというわけではありません。
私自身も、先人から学んできたものばかりです。多くのブログ・サイトの情報を参考にし、現在に至っています。有益なブログ・サイト運営者の方にはたいへん感謝しています。
サイトがハッキングの被害にあってしまうのは、サイト運営者として本当に悲しいことです。
より安全なインターネットを実現するため、またサイト運営者がより安心して自分たちのコンテンツを届けられるようになれば良いと思い、自分でも記事を書いてみました。
もし、抜け漏れなどがございましたら、コメント欄にてアドバイスをいただけると幸いです。
次の記事:Gmailに独自ドメインを設定して安全にメールの送受信を行う
0件のコメント