WordPressは無料で使えるCMSであり、プラグインという様々な機能を追加するメリットがあるゆえ、オープンソースだから危ないとか、危険なプラグインがある等、ネガティブな面も言われています。今までにあったセキュリティ被害例としてレンタルサーバーのロリポップの脆弱性で8,000サイト以上の大量乗っ取りや、WordPress 4.7.2にREST APIの重大な脆弱性があり10万サイト以上が改ざん被害にあったりしています。
こういった事件があると怖くて使えないと思うのもわかります。しかし、自動車や包丁のように、正しく使い方を守って利用すれば便利で価値のあるツールです。そこで、どのようにすればWordPressサイトを安全に保ち、安全な運用をしていけるかお伝えします。
WordPressサイトは危ないか?
危ないか危なくないかという二択であれば危ないです。何の対策もせずにWordPressで構築したサイトは安全ではない可能性が高いかもしれません。ただ、正しく利用することで危険因子を少なくしていくことができます。
WordPressはオープンソースのCMSという性質上、コードが全て公開されています。新しい機能や脆弱性に対応したバージョンが公開されると、WordPressをインストールしているウェブサイトはアップデートできるようになりますが、すべてのコードが公開されているため悪意のあるハッカーが脆弱性をついて改ざんや乗っ取りなどすることができてしまいます。
脆弱性が発見されたら修正されたバージョンが公開されます。そしてまた新たな脆弱性が発見と…いたちごっこです。そのため、利用者ができる一番のセキュリティ対策は常に最新版を使う前提で運用をするべきなのです。
WordPressの脆弱性
WordPressの脆弱性の種類をWP WhiteSecurityから借りました。また、件数が多い順に並べました。
- クロスサイトスクリプティング(XSS)
- SQL インジェクション
- ファイルアップロード
- クロスサイトリクエストフォージェリ(CSRF)
上位4件で全体の75%程度を占めており、特にクロスサイトスクリプティングとSQLインジェクションが全体の半分の原因です。
こちらも同サイトから拝借したデータですが、侵入口として多いのがプラグインが約半数、ついでWordPressコア、その次にテーマとなっています。
ちなみに、日本語でのWordPressの脆弱性は脆弱性対策情報データベースにほぼ毎日WordPressに関しての情報が公開されています。どのような原因にどんな脆弱性があったのかがまとめてあります。
どんなセキュリティ対策を取ればいい?
それでは、WordPressサイトを安全に保つためにできる対策をご紹介します。あなたのサイトは全部ちゃんとできていますか?大丈夫という場合も、念の為確認しておきましょう。
定期的なバックアップ
まずはバックアップ。これがあればセキュリティ被害にあったとしてもすぐに復旧できます。
WordPressサイトの場合、バックアップに必要なものは大きく分けて2つ。
- テーマで利用中のPHPやCSS, JS等を含めたテンプレートファイルや、プラグイン等WordPressデータを含めたWebデータ一式
- データベース一式
上記が完全にバックアップされたデータがあれば、同じサーバーの別ディレクトリでも、別サーバーにでも、ローカル環境にでも復元できます。
バックアップはできれば毎日が理想です。もしサイトをあまり更新していない場合は1週間に一度でもいいでしょう。
バックアップ先は同じサーバーではなく外部サーバーが望ましいです。というのは、万が一サーバーに障害発生等によりデータが保護されない場合、バックアップしたのにデータにアクセスできないという泣きたい状況になってしまいます。
使っていないプラグインは削除
WordPressの魅力の一つにプラグインがありますが、インストールしては停止して、と繰り返していると、いつの間にか使っていないけどインストール済みのプラグインが溜まっていきます。
プラグインに脆弱性が発見され、そのままにしていると危険です。脆弱性の最大の原因はプラグインですからね。よって、使わなくなったプラグインはアンインストールし、削除。また使いたくなったらインストールしましょう。
WordPressコアやプラグイン、テーマ等を定期的にアップデート
コアのアップデート
WordPressはアップデートする種類がいくつかあります。
- コア: WordPressの本体のこと
- プラグイン: 各種インストール済みのプラグイン
- テーマ: 利用しているテーマ。オリジナルテーマの場合は基本的にアップデートという概念はない
- 翻訳: 利用しているプラグイン等にて翻訳データがアップデートされると表示される
コアは常に最新を使いましょう。脆弱性を修正したWordPressが公開されると、画像のように「WordPressの新しいバージョンがあります」と通知され、利用できるようになります。また、変更していない限り、セキュリティの修正がメインのマイナーアップデートは自動で更新されます。
ただ、メジャーアップデートと呼ばれる機能や新しい関数の追加、古い関数の削除などが伴うアップデートの場合、対応していないプラグインのバグが発生したり、関数の影響でエラーが表示されたりという不具合が起こる可能性もあります。そのような場合はテスト環境で先にアップデートをし問題ないか確認したり、アップデート後に不具合があればバックアップから復元するといった対策を行いましょう。
プラグインのアップデート
プラグインも同様に、セキュリティの観点から常に最新を利用するべきです。プラグインは更新後のバージョンとの互換性の表示が一つの指標になります。ここが信頼できない低い数字や不明になっている場合、アップデートを一旦控えた方がいい判断のケースもあります。
個人的には、プラグインのバージョンが1.5.5から1.5.6などのマイナーリリースの場合はあまり気にしませんが、2.0等のメジャーリリースにあたる場合は注意しています。
また、1年以上更新されていない古いプラグインは最新のWordPressに対応していない可能性があります。そのようなプラグインは利用を避け代替プラグインを探す、独自に機能を開発するなどしましょう。
テーマのアップデート
Twenty Nineteen等のWordPress公式ディレクトリに登録されたテーマや、有料テーマを利用している場合はテーマ作者によりアップデートが発生します。WordPressコアアップデートに伴うセキュリティへの対応や、新機能追加といった場合がほとんどです。
テーマを利用している場合は子テーマを作成して構築しているケースがほとんどだと思うので、バックアップを取った上でアップデートしましょう。もし子テーマを作成していない場合、テーマをアップデートするとテーマに加えた変更やカスタマイズが全て上書きされてしまうので要注意。子テーマについては以下を参考にしてください。
参考: [WordPress]カスタマイズを始める前に覚えておきたい子テーマ機能と作成方法
Web制作会社にデザイン作成から依頼した場合などはオリジナルテーマとして登録されている場合が多いかと思います。そのような場合はテーマのアップデートという概念は基本的にありません。
セキュリティ対策の強化
WordPressをインストールしたままの状態や、何もセキュリティ対策しないで利用するのはセキュリティ上おすすめできません。行うべきセキュリティ対策はサイト毎に変わりますが、少なくとも以下の項目は対応しておくと安心です。
WebサイトのSSL化
SSLの仕組みは以下のサイトがマンガ付きでわかりやすく解説してくれています。
SSL(Secure Sockets Layer)とTLS(Transport Layer Security)は、いずれもインターネット上でデータを暗号化して送受信する仕組み(プロトコル)です。個人情報やクレジットカード情報などの重要なデータを暗号化して、サーバ~PC間での通信を安全に行なうことができます。
SSL/TLSってなんだろう?|SSL/TLS-総合解説サイト
運営しているウェブサイトは https://highfivecreate.com のようにhttpsから始まっていますか?sがついていない場合はSSLを利用していないため、すぐにサイト全体をSSL化しましょう。現在ChromeブラウザやiPhoneのSafariではSSL対応していないページにおいて警告や「安全ではありません」等の文言が表示され、このような状態だと訪問者は安全に利用できません。WordPressの推奨要件にもhttpsとあります。SEO的にも常時SSL化が望ましいでしょう。
また、WordPressサイトの場合はデータベースの変更も必要です。全ページや記事内にある画像やリンクなどはSSL前の状態である http から始まるURLのため、すべて https に変更する必要があります。全て手作業で変更するのは途方も無いため、データベース内にあるURLを一括で置換します。
WP-CLIを使ったり、データベース検索置換するツール等を使います。ツールの使い方は以前記事を書きました。
参考: [WordPress]ウィジェットや設定一切合切のデータベースまでまるごと移行できるツール
最近はLet’s Encrypt や AutoSSLなど無料で使えるsslが増えてきて、サーバーによっては手間なく更新してくれるため、予算的に有料SSLだと…という場合は嬉しい選択肢です。
admin等のユーザー名を利用しない
WordPressに限りませんが、adminやAdministrator, サイト名など、安易に想像できるユーザー名を使うのは避けましょう。よく使われてそうなユーザー名+パスワードリストでブルートフォースアタック(よく使われる組み合わせでの総当たり攻撃)を受け、ログイン突破されてしまいます。もしログインされたのが管理者アカウントだったらと考えると…。
user名で避けるべき名前
こんなuser名が狙われやすい!linuxで使ってはいけないuser名5選 – Qiita
admin
test
user
guest
centos
よく使われているからこそ、狙われる。
WordPressの仕様上、ユーザー名の変更はできないため管理者権限で用意に想像できないユーザー名で新しくアカウントを作成し、作成済みの記事などは全て譲渡させましょう。
不要な管理者権限は削除
サイト作成時に関係者の管理者アカウントをいくつか作ったけど、結局使われていないままになっていませんか?めったにログインしないけど、念の為作成した管理者権限の人に限って、困ったことにパスワードを簡易的なものに変更したりします…。
不要な管理者権限は説明した上で削除。また、1年以上ログインがなければ権限を編集者に一旦落とすなど、万が一ログインされても管理者権限をもたないようしておくなどのリスク管理が必要です。
参考: WordPressの不必要な管理者権限アカウントは削除するか権限を落とす
二段階認証の導入
管理者権限アカウントにおいてログイン時の二段階認証は必須です。ユーザー名とパスワードが漏れてしまったとしても、二段階認証を設定していればログインされません。もし仮にログインできてしまったとしても、手元にスマートフォンがないと二段階認証のワンタイムパスワードがわからないので、ログインできません。
二段階認証はブルートフォースアタックへの対策になります。会社や製品/サービスサイトが乗っ取られたら信用情報に関わるし、ましてやお客様の個人情報や会員情報などを扱うサイトであれば致命的です。
二段階認証はプラグインを利用するのが簡単です。いくつかありますが、無料だと以下どちらかがよく使われています。設定も簡単で10分くらい。
どうしても二段階認証が運用上導入できない場合は、パスワードを強力に変更&定期的に変更するなどしてセキュリティ強化して凌ぐしかないですね…
ログインURLの変更
WordPressを使っている場合、対策をしていなかったり、ディレクトリを変更していなければ、大抵は サイトURL/wp-login.php や サイトURL/wp/wp-login.php でログイン画面にアクセスできてしまいます。ログイン画面がわかればあとはユーザー名+パスワードでブルートフォースアタックされてしまうと、二段階認証や強力なパスワードにしていないとログイン突破は時間の問題です。
ログインURLを変更することにより、関係者以外はログインURLがわからない状態になり、ブルートフォースアタック対策になります。
プラグインを使う場合は SiteGuard WP Plugin をインストールすると簡単にログインURLを変更できます。
機能のON/OFFの切替と、変更後のログインページ名の設定を行います。
ログインページ変更 | SiteGuard WP Plugin | ソフトウェアWAFのJP-Secure
プラグインを使わない場合はfuncions.phpに記述することで実装します。
参考: https://webcodezero.com/wordpress/wp-login/#WordPressURL-2
古いバージョンのPHPやMySQLを使わない
現在のWordPressの推奨要件では、PHP 7.3 7.4 / MySQL 5.6 5.7以上となっており、また最小要件としてはPHP 5.6 7.0 / MySQL 5.0です。
PHP バージョン
7.37.4 以上。
MySQL バージョン5.65.7 以上、または MariaDB バージョン 10.1 以上。(中略)
WordPress は PHP
日本語 « 要件 — WordPress5.6.207.0以上及び MySQL 5.0以上で動きます。しかしこれらの古いバージョンは既に公式でサポートが終了しており、サイトを脆弱性にさらす危険性があります。
記載があるように、PHP自体のサポート状況を見ると、5.6と7.0のセキュリティサポートは2018年をもって既に終わっていますし、7.1のセキュリティサポートも2019年12月で終了予定ですしました。2024/03/26時点でPHP8.0までセキュリティサポートが終了しており、8.1は2024年11月に終了予定です。
MySQLは公式の情報が見つけられませんでしたが、こちらによると5.0が2012年1月に既に終了、5.6は2021年2月終了予定です。
サポートが終了するということは、仮にセキュリティ上脆弱性が発見されても修正されないということです。よって古いバージョンを使い続けることによりリスクにさらされていることになります。
定期的に現在利用しているバージョンが何か確認し、サポート終了しているバージョンを使っている場合はバージョンを上げましょう。レンタルサーバーだとコントロールパネルからPHPやMySQLのバージョンを変更できるところが多いですが、アップデート後にエラーやバグが表示されることもあるため、バックアップは忘れずに行いましょう。
古いPHPを使い続けるとリスクがある一方で、バージョンアップすることで性能向上などのメリットがあります。詳しくは以前書いたので興味があればご覧ください。
参考: 古いバージョンのPHPを使い続けていくことの問題点
ちなみに、レンタルサーバーだとPHP7.3を使えるところはまだ限られています。(記事公開時点だとエックスサーバーやヘテムル、KAGOYA等は未対応)よって、PHP 7.2や7.1を利用しているサイトもまだまだ多いでしょう。2024/03/26現在ではPHP8.2が利用可能なところが多いようです。(エックスサーバー、さくらのレンタルサーバ、ヘテムル、KAGOYAで確認済み)
FTPは使わないという選択肢
サーバーとファイルのやりとりをする時にFTPで接続していませんか?FTPは暗号化されていないためとても危険な接続方法です。そもそもFTPとは、
FTP(File Transfer Protocol)はサーバーとクライアント間で、ファイルを送受信する通信の決まりごとです。
【入門】FTPとは?通信・ソフトについて分かりやすく解説します | カゴヤのサーバー研究室
という決まりごとであって、暗号化せずに転送します。そのため、ユーザー名とパスワードを暗号化しないで送ってしまいます。それは危険だよねってことで、SSLを利用して暗号化したFTPSや、暗号化と認証を使ったSSH接続を利用したSFTP、SSHを利用しFTP接続とは異なるより安全な通信であるSCPなどがあります。
FTPは使わずに、できればSSH・SCP・SFTP。最低でもFTPSと、より安全に転送できる方法を選択しましょう。
参考: 「FTP」まだ使ってる? プロが使う「SCP」通信で、安全にファイル転送しよう
定期的なセキュリティスキャン
マルウェアやコード改ざん、バックドアといった不正なコードやファイルがないかサイト全体を定期的にスキャンし、危険な状態になっていないか確認します。
プラグインでスキャンできるものはたくさんありますが、有名なところとして以下です。
URLを入力するだけで、外部からチェックしてくれる無料のツールもあります。
- Sucuri SiteCheck – Free Website Security Check & Malware Scanner
- WordPress(ワードプレス)脆弱性診断 セキュリティースキャナ | ワードプレスドクター
不正なコードは設置されていないか、サイトの脆弱性がないか定期的にチェックし、常に安全な状態をキープすることが安心なサイト運用に繋がります。
テスト環境の作成
テスト環境がなく本番環境しかない場合、色々なリスクがつきまといます。
- WordPressコアやプラグインといった新しいアップデートのたびに、不具合やエラーのリスク
- 新しいページ作成時に、本番環境上しかないため稼働中のサイトに影響を与えてしまうリスク
- 新しいプラグインの追加や既存プラグインの停止により、稼働中サイトの不具合やエラーが起こるリスク
- PHPのバージョンアップにおいて、エラーや警告メッセージが表示されるリスク
詳しい理由は なぜWordPressのテスト検証環境を作る必要があるのか にまとめています。
テスト環境と本番環境は同じ環境で構築しないとエラーや不具合が再現できず、「テスト環境では問題ないが本番環境でエラーが出ている」といった状態にもなるため、同一環境上で作成することをおすすめします。
本番サイトを複製するには、容量制限がありますが All-in-One WP Migration というプラグインが非常に簡単です。Xserverになりますが、以前テスト環境の作成方法を書きましたのでご参考ください。
参考: WordPressのテストサイト・検証用環境の作り方
なぜWordPressのセキュリティ対策をしないといけないのか
以上、WordPressで行うべき代表的なセキュリティ対策をご紹介しました。実は、WordPressに対してのセキュリティ対策は年々重要になってきています。以下は2016-2018年の各種CMS(WordPress, Joomla, Drupal, Magento)において脆弱性の数のグラフです。(参考 The State of Web Application Vulnerabilities in 2018 | Imperva )
4つのCMSの中でWordPressがダントツで脆弱性が多く、また年々その数は増え2018年のWordPressにおいては542件です。
また、セキュリティソリューションを提供するSucuriが発表した記事によると、セキュリティ被害にあったCMSのうち9割はWordPressが対象でした。
「こんなに危険が多いなら、WordPressなんて使わなければよかった…」と思うでしょうか。WordPressが狙われる理由はとても簡単です。単に利用者が多く、これからももっと増えていくことが予想されるからです。
データの緑のラインはHTMLサイトですが、年々減少していっています。逆に、赤いラインはWordPressサイトの数ですが、増加しているのがわかります。あと数年でWordPressサイトの方がHTMLサイト数より多くなる見込みです。
WordPress以外のCMSは圧倒的に少なく、CMS界でWordPress一強なのがデータからわかります。
なので、WordPressが狙われるのはある意味理にかなっているんです。ウイルスもMacはユーザーは少ないから標的にされにくいですが、Windowsばかり狙われますよね。
WordPressは便利な反面、脆弱性対策をしっかりとやっていないとある日サイトが乗っ取られたり、被害にあうかもしれません。100%安全はありえませんが、今からできるセキュリティ対策をしっかりやっておくことをおすすめします。
WordPressサイトのセキュリティ対策で困っているサイト向けにWordPress 保守管理サポートを提供しています。