中級者向けWordPressのセキュリティ徹底対応まとめ | COMMONS NOTE

中級者向けWordPressのセキュリティ徹底対応まとめ

どうもこんにちは!ワードプレス大好きマダラです。

今回は、Wordpress のセキュリティ対応方法をざっくり紹介していきたいと思います。

参考にした書籍はこちら!
ワードプレスセキュリティ大全です!

初心者でも対応できる範囲からちょっと、小難しいレベルまでさまざまセキュリティ対応がまとめられていました!

より細かく知りたい方は是非購入を検討してみてください
では早速紹介していきます

https/SSL対応

基本中の基本、https対応ですね
非SSLサイトとは情報が暗号化されていないため、フォーム送信などがあるサイトでは必須の対応となります

これまでは年間数万円といったランニングコストがかかっていたが、
Let'sEncryptを利用することで無償の認証局の証明書を利用して暗号化することができるようになりました。また、SEOの観点でも、GoogleがSSL対応を推奨しているので効果がありますし。非SSLサイトには警告表示が出るようになっています。

なお、こちらの対応をいれた場合パスがhttpsになるので、Google Search Console、Googleアナリティクスなどの設定をやり直さなくてはなりません。

独自ドメインでの無料SSL設定が可能なサーバとそうでないサーバがあるので、事前調査の必要があります。
httpsへのリダイレクトは下記の2パターンあります

  • htaccessに記述する
  • Really Simple SSLプラグインで行う

プラグインはインストールするだけでOKなので、初心者の方はこちらです。
ちなみにhtaccessを編集場合でもそれほど難しくはありません。

  1. WPのサイトの設定からサイトURLをhttps://〜に変更する
  2. .htaccessを編集する。Xサーバの場合ツールから直接変更可能。下記の記述を一番上につける
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

# BEGIN WordPress ←もとからある
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

ちなみにこのhttps対応ですが、WP公式に登録されているテーマであれば対応不要ですが、個人開発のテーマでhttpで記述している場合には、そこもhttpsにしないといけないので対応が必要となる点に注意してください。

そん場合でも、Search Regaxまたは Better Search replaceプラグインでで記事内のhttpは一括置換できます

wp-config.phpのパーミッション

wp-config.phpのパーミッションを600にする。640または700でも問題はない。究極は400(r-------)
ALL In One WP Securityでパーミッションの設定は変更できます

WPバージョン・テーマバージョン・プラグインバージョン情報の非表示

サイトで使用しているシステムが、脆弱性のあるバージョンであることがハッカーにわかると簡単に攻撃ができてしまいます。

対応方法は、いつもの

  • functionsに書くか
  • プラグインで消すか

になります。ALL In One WP Securityで消せるのでこちらを使用するのが便利でしょう。
このプラグインでは利用しているテーマやプラグインのバージョンも消してくれる点で優位性がありますSettingのWP Version INFOから、Remove WP generator meta info: にチェックすればOKです

投稿者ID情報を与えない

投稿者IDをHTML上で出力させないようにしましょう。
ちなみに、WPの設定でニックネームを変更するだけでHTML出力は消せます。

しかし、それだけでは完璧ではありません。
投稿者アーカイブページをのリンクを変更する必要があります。このページが生きていると全てが無になります。

「サイトURL?author=1」を入力すると、「サイトURL/author/ユーザーID/」のページに飛ぶためここからIDが判明してしまうのです。

Edit Author Slagプラグインを使用してアカウントのスラッグを変更して対応します。
投稿者アーカイブ自体の無効化なら、Disabe author Archivesというプラグインでも対応可能です。

functions.phpに記載するのもかなり簡単なので、エンジニアの方にはこちらをお勧めします

xmlrpc.phpの無効果

他のサービスやWebツールからWPサイトをコントールする機能です。
こちらを悪用した改ざん事件もあるため使用していなければ無効化するのが無難でしょう。
ファイル自体を削除するか、Site Guard WP PluginからXMLRPCの無効果をONにすればOKです。

admin-ajax.phpの無効果

WPでAjaxを使用するときのファイルです
Ajaxとは

ウェブブラウザ内で非同期通信を行いながらインターフェースの構築を行うプログラミング技法

です。
ページを再読み込みせずに、javascriptとXMLを使用してページの一部分を書き換えて通信データ量やサーバ負荷を軽減する技術になります。わかりやすい例で言うとGooglemapが凡例ですね。

プラグインとの兼ね合いで脆弱性報告も多く無効化や制限を検討できます。

.htaccessかfuntions.phpで特定のIPやアドレスだけ動作させることも可能ですが、
Ajaxを利用するテーマやプラグインもあり有効にしておかなければならない事例も多々あります。
そのため、対応が難しければ、コアファイルやプラグイン、テンプレートの定期更新で防ぐほうが無難でしょうか

wp-traceback.phpの解除

WPでトラックバックを送受信するためのプログラムです。
トラックバックというのは、ブログの記事を引用した際などのお知らせを自動的に送信する機能で、本来は「リンクさせていただきました」の意味合いで通知を送るものでした。

送られた側がトラックバック一覧を自動表示すると、自分の記事がどのサイトで引用されているのかがわかり、ネット黎明期には活用されていました。

最近では宣伝リンクを送ったり、被リンク稼ぎで悪用されるため利用者はめっきり減っています。

必要なければ無効にしておくべきもので、WP設定画面のディスカッションの項目で「新しい記事に対し他のブログからの通知を受け付ける」を解除するだけで対応できます

古いバージョンのWPではwp-traceback.php自体に脆弱性があったので、ファイル自体を削除してしまうのも手ですね

推測されにくいパスワードにする

パスワードの定番中の定番対応ですねw

最近では、パスワードの定期更新は効果が薄いことがわかっています。
マイクロソフトや総務省ではもう推奨していないそうです。ちなみに私の勤務する会社でも定期変更は廃止されました。半年に一回変更して非常に覚えづらかったので助かりました。

パスワードを変更することよりも、「大文字英数字記号を合わせて計算にかかる時間を非現実的な長さになる」ようにしたほうがいいです。

種類使用可能文字数最大解読時間(4桁)最大解読時間(6桁)最大解読時間(8桁)最大解読時間(10桁)
英字(大文字小文字区別なし)26文字3秒37分17日32年
英字(大文字小文字区別あり)+数字62文字2分5日50年200年
英字(大文字小文字区別あり)+数字+記号93文字9分54日1000年1000万年

コンピュータの処理性能が向上するとパスワード特定の時間は更に短くなります

二段階認証を導入する(希望の場合)

2段階認証を導入するとセキュリティはかなり強固になります。
ただし個人的には、かなり使いやすさも下がるのでめんどくさいです

認証には

  • Googleアカウント
  • Eメール
  • ワンタイムパスワード
  • SMS

などがよく利用されますね

対応自体はプラグインでサクッと行うことが可能です

  • Email Verification
  • SMS Verification
  • OTP Verification
  • Google Authenticator(おすすめ)
  • Wordfence Security

QRコードをクライアントに連携して、スマホで登録してもらう必要があります

ログインURLを守る

デフォルトではwp-login.phpになっているのでこのパスを変更しましょう。
知っている人は誰でもログイン画面に到達することができます。

変更方法はSite Guard WP Pluginを利用して変更するのが簡単です。
ログインページはブックマークしておかないとわからなくなります。

なお、上記でログインURLを変更しても、サイトURL/wp-adminにアクセスすると自動的にログインページにリダイレクトされる仕様があるので意味ないです笑

Site Guard WP Pluginの「管理ページアクセス制限」をONにすることで、24時間以内にログインしたことのない接続元IPアドレスからはリダイレクトを行わなくなり、不正侵入者を弾くことができます。

更に強固にするにはログインURL自体にベーシック認証をかける・IPアドレス制限をかけるなどの方法を検討すると良いでしょう。210人小になって使い心地はかなり悪くなりますが、、、

ログインを守る

ログイン試行回数制限を入れましょう。以下の攻撃の対策になります

  • ブルートフォース攻撃
  • パスワードリスト攻撃
  • 辞書攻撃
  • レインボー攻撃

流石に正規の利用者あれば、5回連続で間違えると言うことはないと思うので、5回くらいに設定しておくと良いでしょう。

画像認証CAPTCHAを入れることで、コンピュータによるログインを防止することも有効です。
なお、この画像はひらがなで設定することで日本語のわからない外国人には難しくなってセキュリティ強度が上がります。日本語最強。

WPScanによる脆弱性チェック。またはWPSec.comによるチェック

Unix向けのオープンソースプログラムのため、Windows、Macにインストールするのはかなり手間です

サイトでスキャンできること

  • インストールさているWordPressのバージョンと関連する脆弱性
  • インストールさているプラグインと関連する脆弱性
  • インストールさているテーマと関連する脆弱性
  • ユーザー名の列挙
  • パスワードブルートフォーシングによる弱いパスワードを持つユーザー
  • バックアップされ、アクセス可能なwp-config.phpファイル
  • アクセス可能なデータベースダンプ
  • エラーログがプラグインによって公開されている場合
  • メディアファイルの列挙
  • 脆弱なTimthumbファイル
  • WordPressのreadmeファイルが存在する場合
  • WP-Cronが有効になっている場合
  • ユーザー登録可能になっている場合
  • フルパス開示
  • ディレクトリリスティング

以下のサイトが便利だったので参考にすると良いでしょう
macOSでWPScanを使ってWordPressの脆弱性診断をやってみる | uuutee.log

データベース接頭辞の変更

こちらは、SQLインジェクション対策になります。エンジニアではない方は「なんぞそれ?」等状態かもしれませんが、DBに対して解釈される文字列をうまく組み込んでDBの誤作動を起こさせる攻撃です。

変更方法は、例の如く以下の2パターンです。

  • phpMyAdminで接頭辞を変更して、wp-config.phpで接頭辞の設定を書き換える方法
  • プラグインで行う方法

All In One WP Security Firewallまたは Change Table Prefixというプラグインで対応できます。

ただし、DBの接頭辞変更は、WPの理解が浅い人がやると、サイトがぶっ壊れる可能性があるので、
実行する前にはAll In One WP Security Firewallでデータベースのバックアップを必ず行いましょう

プラグインの設定に追加するだけで対応可能ですが、不具合が発生した際にはなかなか戻すのに区政されるかと思います。

まとめ

以上、Wordpressのセキュリティ諸々対応まとめでした!
すでに対応済みのものから、そんなものまであるのか!という発見がありましたでしょうか

今回はブログなのでかなり詳細を省いています。
より詳しく知りたい方は是非書籍の方を手に取ってみてください。

Amazonでは最初何ページかを無料で閲覧することができるので、購入前に参考にすることができます!

ではでは