本サイトにはプロモーションが含まれています。
【警告】絶対やるべき!WordPressのセキュリティ対策リスト13項目
必ずやっておくべきWordPressのセキュリティ対策をリスト化しました。
WordPressの脆弱性を狙うサイバー攻撃は、1日に5,000万件超も観測されていて、セキュリティ対策は超重要です。
専門的な知識がなくても誰でもできるWordPressのセキュリティ対策とは?
本記事は、ブログブートキャンプのブログの始め方-WordPressに関する内容となります。
WordPressのセキュリティ対策ってやった方がいいのかな?
無対策ではWordPressのセキュリティは弱いぞ!不正アクセスの被害に遭ってからでは遅いので、今からできる対策をやっておこう。
気になるところへ読み飛ばす
WordPress セキュリティ対策リスト
必ずやっておくべきWordPressのセキュリティ対策を13項目のリストにまとめました。
簡単な設定変更やコードのコピペですぐにできるものばかりなので、ウェブサイト運営の合間に時間を見つけて、1つずつ実施してみてください。
最新版にアップデート
WordPress関連のソフトウェアを最新版にアップデートしておくことが最も基本の対策です。
古いソフトウェアにはセキュリティ上の脆弱性が見つかっていることがあり、攻撃者が不正アクセスをする際の起点となってしまうからです。
Web サイトの脆弱性を標的としたアクセスについては,SQL インジェクションの脆弱性の他,ブログサイト等の構築に広く使用されているソフトウェア WordPress の脆弱性がねらわれている.WordPress で構築されたサイトに対する不審なアクセス,さらに同脆弱性を利用したサイト改ざんも確認されている.
引用元: 安全工学-サイバーインシデントの最新動向
攻撃者はWordPress本体だけではなく、テーマやプラグイン、PHPの脆弱性を狙ってくるため、以下4種のアップデートが必要になります。
- WordPress本体
- テーマ
- プラグイン
- PHP
WordPress本体
WordPress本体のアップデートがある場合は、管理画面に更新のメッセージが表示されます。
更新ページで「今すぐ更新」をクリックし、最新バージョンにアップデートしておきましょう。
テーマ
テーマについてもアップデートがある場合、管理画面に更新のメッセージが表示されます。
更新ページにアクセスして「テーマの更新」をクリックし、最新版にアップデートしましょう。
テーマの更新が通知されたことなんて、ないんだけど…?
テーマによっては、管理画面での更新に対応していない場合もある。開発者のページで最新版をダウンロードすればOKだ。
プラグイン
プラグインのアップデートも同様に、管理画面に更新のメッセージが表示されます。
更新ページかプラグイン一覧ページで、「今すぐ更新」をクリックするだけで完了です。
PHP
PHPは、WordPressを動かすためのバックボーンであり、サーバー側で更新が必要になります。
現時点でバージョン7.1より古いPHPについては、セキュリティサポートが終了していて、脆弱性に対して保護されていない状態です。
サーバーの管理画面にPHPバージョン切替という項目があるので、最新版に変更してください。
自動アップデートを有効化
最新版が出る度に更新するのが大変という場合は、自動アップデートを有効化すればOKです。
バージョンアップで脆弱性が公表されると、その情報を元に攻撃されることもあり、自動アップデートは効果的なセキュリティ対策となります。
管理画面から「外観→テーマエディター→テーマファイル」と進み、function.phpに以下のコードをコピペで設置してください。
//本体のメジャーアップデート
add_filter( 'allow_major_auto_core_updates', '__return_true' );
//本体のマイナーアップデート
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
//テーマ
add_filter( 'auto_update_theme', '__return_true' );
//プラグイン
add_filter( 'auto_update_plugin', '__return_true' );
自動アップデートを無効化したいという場合は、__return_true
の部分を__return_false
に変えればOKだ。
バージョン情報を非表示に
WordPressのバージョン情報を非表示にして、攻撃者に情報を与えないようにしましょう。
攻撃者は不正アクセスを試みる際に、ターゲットの情報収集から始めて脆弱性を探すので、ソフトウェアのバージョンを隠すことが効果的です。
こちらも、管理画面から「外観→テーマエディター→テーマファイル」と進み、function.phpに以下のコードをコピペしてください。
remove_action('wp_head','wp_generator');
function remove_wp_version( $src ) {
if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_wp_version', 9999 );
add_filter( 'script_loader_src', 'remove_wp_version', 9999 );
ログインURLを変更
WordPressのログイン画面には誰でもアクセスできてしまうため、URLを必ず変更します。
攻撃者にログインURLにアクセスされると、ユーザー名・パスワードを総当りで試していくブルートフォース攻撃を仕掛けられてしまいます。
サーバーにある.htaccessに以下のコードをコピペで追加してください。多くのサーバーでは、管理画面から直接ファイルを編集できます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^enter/?$ /wp-login.php?xxxxxxxxxx [R,L]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^dashboard/?$ /wp-login.php?xxxxxxxxxx&redirect_to=/wp-admin/ [R,L]
RewriteRule ^dashboard/?$ /wp-admin/?xxxxxxxxxx [R,L]
RewriteRule ^register/?$ /wp-login.php?xxxxxxxxxx&action=register [R,L]
RewriteCond %{SCRIPT_FILENAME} !^(.*)admin-ajax.php
RewriteCond %{HTTP_REFERER} !^(.*)example.com/wp-login.php
RewriteCond %{HTTP_REFERER} !^(.*)example.com/wp-admin
RewriteCond %{HTTP_REFERER} !^(.*)example.com/enter
RewriteCond %{HTTP_REFERER} !^(.*)example.com/register
RewriteCond %{HTTP_REFERER} !^(.*)example.com/dashboard
RewriteCond %{QUERY_STRING} !^xxxxxxxxxx
RewriteCond %{QUERY_STRING} !^action=logout
RewriteCond %{QUERY_STRING} !^action=rp
RewriteCond %{QUERY_STRING} !^action=register
RewriteCond %{QUERY_STRING} !^action=postpass
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^.*wp-admin/?|^.*wp-login.php /not_found [R,L]
RewriteCond %{QUERY_STRING} ^loggedout=true
RewriteRule ^.*$ /wp-login.php?xxxxxxxxxx [R,L]
</IfModule>
上記のコードをベースに、自分自身で変更する箇所が2つあります。
1つ目の変更点として、example.com
の部分をWordPressのドメインに変更してください。
2つ目の変更点として、xxxxxxxxxx
を任意の文字列に設定してください。設定した文字列に応じて、次のようにログインURLが設定されます。
https://example.com/wp-login.php?xxxxxxxxxx
ログインURLの変更は、SiteGuard WPというプラグインでも可能だ!
?author=1を非表示に
WordPressのログインに使うユーザー名がわかってしまう?author=1を非表示にしておきます。
試しにURLの末尾に?author=1を付けてアクセスしてみてください。投稿者ページにリダイレクトされ、ユーザー名が表示されているはずです。
こちらも、サーバーにある.htaccessに以下のコードを追加してください。ファイルはサーバーの管理画面から編集することができます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://example.com/? [L,R=302]
</IfModule>
https://example.com/
の部分については、自分自身のURLに変更してください。
パーミッションの変更
セキュリティ上の重要度が高いファイルのパーミッションを変更し、アクセスを制限します。
パーミッションとは、サーバーに置かれたファイルへのアクセス権のことで、読み込み・書き込み・実行の各権限を与えるかを設定できます。
今回は、特に重要なwp-config.phpのパーミッションを変更します。このファイルには、データベースのパスワードなどが記載されています。
サーバーの管理画面でファイルマネージャーを実行し、wp-config.phpを探してください。
多くのサーバーでは、ドメイン下やpublic_html下にファイルが置かれているはずです。
パーミッション(属性)変更を選択し、「400」と入力して変更を反映します。
400は、所有者が読み込みだけをできるというパーミッション設定となり、第三者がファイルを読み取ったり改ざんすることを防げる設定です。
xml-rpc.phpを無効化
サイバー攻撃に使われることが多いxml-rpc.phpというファイルを無効化しましょう。
元々は、WordPressでリモート投稿機能を使うためのAPIですが、不正ログインやDoS攻撃の標的にされるという事例が多数報告されています。
DoS 攻撃は, ネットワークシステムその他のリソースへの正規のユーザーからのサービスを妨害したり, 完全に利用不能に陥らせるようなタイプの攻撃である [1].
引用元: 情報科学技術フォーラム-UTM では検出困難な DDoS 攻撃を統計的手法を用いて検出する研究における DDoS 攻撃環境の開発
サーバーにある.htaccessに以下のコードを追加して、全てのアクセスを遮断します。
<files xmlrpc.php>
order deny,allow
deny from all
</files>
WordPressアプリなどによる記事投稿は使えなくなってしまうので、注意が必要だ。
不要なファイルを削除
WordPressの動作に直接関係がない不要なファイルを削除しておきましょう。
公開したままだと、攻撃者にバージョンなどの余計な情報を与えることにつながってしまいます。
具体的には、次の3つのファイルをファイルマネージャーで削除すればOKです。完全にいらないファイルなので、バックアップも必要ありません。
- license.txt
- readme.html
- wp-config-sample.php
不要なテーマ・プラグインを削除
全てのPHPファイルは攻撃対象になるため、不要なテーマ・プラグインは削除してください。
テーマ・プラグインの脆弱性を狙われるリスクを最小限にするという観点から、インストール数は少しでも減らすことが望ましいためです。
特に、WordPressコアに同梱されているテーマであるTwenty Twentyはインストール率が高く標的となりやすいので、削除しておきましょう。
reCAPTCHAによる認証
BOTによる自動攻撃を防げるreCAPTCHAを導入することも効果的なセキュリティ対策です。
reCAPTCHAとは、Googleが提供する認証システムで、人間がBOTかを自動で判別してスパムをほぼ全て遮断することができます。
手軽かつ効果的に各種フォームのセキュリティを強化できるので、導入を進めてみてください。
サーバーでWAFを有効化
ウェブサイトの脆弱性を狙う攻撃を遮断することができるWAFを有効化しておきましょう。
Web Application Firewall(WAF)はその名の通り Web システムに特化した専用ファイアウォールで,HTTP や SSL のプロトコルの内容を検査し,攻撃を検知,防御するシステムである.
引用元: 日本ユニシス-Web サービスのためのネットワーク基盤技術
WAFを使うことにより、SQLインジェクションやクロスサイトスクリプティングといった一般的な攻撃パターンからWordPressを守れます。
嬉しいことに、多くのレンタルサーバーではWAFが標準装備されていて、無料で利用可能です。
サーバーの管理画面にWAFという設定項目があるので、全て有効化しておけばOKです。
WAFを有効化したら、記事投稿ができなくなったんだけど?
WAFは、偽陽性といって正当なリクエストを誤って攻撃と判定してしまうこともあるんだ。
その場合は、一時的にWAFをOFFにすればOKだ。
海外からのアクセスを遮断
国内在住の方であれば、重要なファイルへの海外からのアクセスを遮断するのがベストです。
WAFがブロックした攻撃のログを確認してみても、海外IPアドレスからの攻撃が大多数を占めているため、確かに効果的なことがわかります。
こちらも国内のレンタルサーバーであれば、管理画面で簡単に設定できるようになっています。
サーバーの管理画面で、WordPressセキュリティ設定という項目を探してみてください。
基本的には、ダッシュボード・XML-RPC・REST APIの3つを保護しておけばOKです。
定期的なバックアップ
WordPressを守るためのセキュリティ対策に加えて、定期的なバックアップも重要となります。
きちんとバックアップデータを残していれば、万が一不正アクセスや改ざんの被害に遭ってしまっても、元通りにデータを復元できます。
プラグインで予めスケジュールを入力しておくだけで、定期的に自動バックアップできるので、ぜひ導入をしてみてください。
スポンサーリンク
セキュリティ対策の関連サイト
最後に、WordPress関連のセキュリティ情報を提供しているサイトを3つ紹介します。
WordPressのセキュリティの脆弱性など最新情報のキャッチアップや自分のWordPressのセキュリティチェックに活用してみてください。
WordPress.org
Security NEXT
WordPressのセキュリティチェック
まとめ
今回は、WordPressのセキュリティについて、必ずやっておくべき対策を解説しました。
記事のポイントをまとめます。
- WordPressのセキュリティ対策を13項目のリスト形式で紹介しました
- アップデートはとにかく重要なので、常に最新版を使うようにしましょう
- 重要なファイルを手厚く守り、不要ファイルを削除する方法を解説しました
同じカテゴリーの記事
- WordPressをインストールして使い始めよう
- WordPressの環境を整えて快適に使おう
- WordPress関連で知っておきたい豆知識
以上、「WordPressのセキュリティ対策リスト」でした。
この記事の参考情報
- WordPress.org
セキュリティ、WordPressの安全性を高める、ブルートフォース攻撃、パスワードのベストプラクティス - 団体
内閣サイバーセキュリティセンター、情報処理推進機構、JPCERT