*

WordPress セキュリティ対策 ポイント16選

公開日: : 最終更新日:2016/12/10 WordPress全般 ,


多くのブログやホームページのプラットフォームに利用されているWordPressですが、人気ゆえに多くのウイルスやMalware、DDos攻撃の的となっています。

誰でも簡単にインストールできる反面、適切なセキュリティを施している方は少ないのではないかと思います。特にAmazon AWSやMicrosoft Azureなど、OSから自分で入れていくタイプのクラウドサービスを利用していると、自由にカスタマイズできる反面、ユーザーが意識してセキュリティ対策をしないと、裸で公衆の面前に立っているような状態になっている可能性もあります。

今回はすぐにできるセキュリティ対策のポイントを16個紹介します。

AWSやAzureのようにSSHでログインして動き回れるようなホスティングではなく、FTPとphpMyAdmin経由でのDB操作のみ許可されている場合は、適宜必要なものだけピックアップして実施してみてください。それぞれの施策に依存関係はないので、どこから始めても、何個実施してもOKです。

1.Cookieの暗号化

やること

サイト訪問者 のコンピュータに保存されるcookieの中身を暗号化する

wp-config.phpの中身です。デフォルトだと下記のように記載されているので、これを書き換えます。

下記のURLをブラウザで閲覧すると、ランダムなキーが生成されるので上記の箇所を上書きしてください。
https://api.wordpress.org/secret-key/1.1/salt/

効果

平文でcookieに保存されていたパスワードが暗号化されるため、盗まれても利用不可

2.データベースのprefixを変更

やること

データベースのprefixをデフォルトの”WP_”からカスタマイズしたものに変える

こちらのサイトがわかりやすくまとまっています。
http://viral-community.com/wordpress/wordpress-table-prefix-1305/

上記サイトがクローズしてしまった時のために私が行った手順を書いておきます。

やることは3つです。

1. wp-config.phpのprefixを wp_ から お好きなものに変更(例: wp_sitename_)

wp-config.php内で下記のラインを探し、’wp_’を変更します。

次項以降の説明の都合上、仮に下記のように変更します。

2.DBのテーブル名を更新

MySQLにログインし、テーブル名一覧を取得し、下記のようにクエリーを作成します。

ALTER TABLE (元のtable名) RENAME TO (変更後のtable名);

例:ALTER TABLE wp_commentmeta RENAME TO wp_sitename_commentmeta;

プラグインを入れている場合は、デフォルト以外のテーブルもできている可能性があるので、全てのテーブルで名前を変更します。

SSHでログインしてコマンドラインから実行してもよいですが、phpMyAdminやMySQL workbenchを使うとよりわかりやすいと思います。

TIPS
Webserverにnginxを利用している方は下記の手順で簡単にphpMyAdminが利用できます。

nginxのコンフィグファイルで下記の箇所を探します。

これを下記のように変更します。

3.optionsとusermetaテーブル内でテーブル名を指定している箇所を1の内容で更新

下記のクエリーを発行します。
SELECT * FROM wp_sitename_options WHERE option_name LIKE ‘%wp_%’

option_nameに’wp_’が指定されている箇所があるレコードがヒットするので、ひとつづつ’wp_sitename_’に変更していきます。

同様にusermetaテーブルも下記クエリーを発行します。
SELECT * FROM wp_sitename_usermeta WHERE meta_key LIKE ‘%wp_%’

meta_keyに’wp_’が指定されている箇所があるレコードがヒットするので、ひとつづつ’wp_sitename_’に変更していきます。

効果

不正アクセスがあってもDB内のデータを改ざんされにくい。テーブル名を推測されにくい。

3.WP,プラグインのアップデート

やること

WordPress本体、プラグインを最新のものにアップデートする。2年以上更新されていないプラグインは代替プラグインを探す。

WordPress管理画面から更新をします。WP本体、プラグインの更新によりサイトが動作しなくなることもあるので、事前にバックアップを取ったほうがよいです。プラグインの更新もひとつづつ行ったほうが、問題発生時の切り分けが簡単になるのでお勧めです。

効果

古いWordPressやプラグインのセキュリティホールをついた不正行為を防ぐ

4.管理ページからプログラムを編集不可

やること

WordPressの管理ページからプログラムをEditできる機能を停止します。

wp-config.phpの最後尾に下記の一行をいれます。

効果

管理ページへ不正アクセスされてもソースコードの改ざんができない

5.テーマとプラグインを導入・変更不可

やること

WordPressの管理ページからプラグインをインストールする機能を停止します。

wp-config.phpの最後尾に下記の一行をいれます。

効果

管理ページに不正アクセスされてもテーマとプラグインのアップデートができない

6.ファイル単位でパーミッションを設定する

やること

※sudo権限があるユーザーで実行してください。

1.ドキュメントルート以下のパーミッションを755か750にします。
例:chmod 755 -R /var/www/html

2.ファイルのパーミッションを644にする
例:find /var/www/html/ -type f -exec chmod 644 {} \;

3.wp-config.phpのパーミッションを600にする
例:chmod 600 wp-config.php

効果

サーバに不正ログインされてもファイルを編集ができない

7.エラーメッセージに物理パスを表示しない

やること

テーマとプラグインが原因でエラーが起きても、エラーメッセージに物理パスを表示しない

wp-config.phpに下記の最後尾に下記をいれる

効果

ディレクトリ構成を開示しないため、ディレクトリやファイル改ざんのあたりをつけられない

8.設定ファイルはブラウザ経由でアクセス不可

やること

wp-config.phpにブラウザ経由でアクセスさせない

Apacheの場合
ドキュメントルートの.htaccessに下記を追加します。

nginxの場合
コンフィグファイルに下記を追加します。

効果

ブラウザ経由で設定ファイルの閲覧ができない

9.コアファイルはブラウザ経由でアクセス不可

やること

ブラウザで直接参照されることがない(内部includeでしか使われない)WordPressのコアファイルはブラウザ経由でアクセス不可にする

Apacheの場合
ドキュメントルートの.htaccessに下記を追加します。

nginxの場合
コンフィグファイルに下記を追加します。

正常にサイトが閲覧できればこのままでよいですが、もし見れない箇所などが出た場合は、上記を入れた後に、下記のようにディレクトリ単位でallow設定をいれてください。にしてみてください。

効果

ブラウザ経由でアクセスする必要のないファイルは直接アクセスできない

10. .htaccessへブラウザからアクセス不可

やること

ブラウザ経由のアクセスをコントロールする.htaccessファイル自体へブラウザからアクセス不可にする

Apacheの場合
ドキュメントルートの.htaccessに下記を追加します。

nginxの場合
コンフィグファイルに下記を追加します。

効果

ブラウザ経由で.htaccessに直接アクセスできない

11.XML-RPCは使用不可にする

やること

Apacheの場合
ドキュメントルートの.htaccessに下記を追加します。

nginxの場合
コンフィグファイルに下記を追加します。

下記二つのプラグインをインストールします。
https://wordpress.org/plugins/disable-xml-rpc-pingback/
https://wordpress.org/plugins/disable-xml-rpc/

効果

リモートログインによるDDoSアタックができない

12.管理ページへのログインの試行回数を制限する

やること

管理ページへのログイン試行回数を制限する

下記のプラグインをインストールする
https://wordpress.org/plugins/login-lockdown/

効果

管理ページへの総当り不正ログインができない

13.WordPressのバージョンナンバーを表示しない

やること

生成されたHTMLにWordPressのバージョンナンバーを表示しない

利用中のthemeの下にあるfunction.phpの最後尾に下記を入れる。

効果

特定のバージョンをターゲットにした攻撃ができない

14.管理ページへのログイン履歴をとる

やること

管理ページのログイン毎にログをとり、不正利用があった際に調査のよりどころとする

下記のプラグインをインストールする。
https://wordpress.org/plugins/simple-login-log/

効果

不正アクセスがあった場合にトラックできる

15.監視ツールをいれる

やること

ウイルス、マルウェア、ハッキングを毎日チェックするプラグインを導入する

下記のプラグインをインストールする
https://wordpress.org/plugins/wordfence/

無償版・有償版があり、有償版にするとより強固なセキュリティチェックと、スケジュールによる自動実行が可能。
1サイト年間40ドル弱。複数サイト契約によるボリュームディスカウントあり。

効果

不正ファイルやアクセスがあった場合にすぐに検知できる

16.自動でsnapshotをとる

やること

※この対応はAmazon AWSを利用している場合のみです。他のホスティングを利用している場合は、適切な方法で定期的にバックアップを取っておきましょう。

インスタンスにsnapshotをとるスクリプトを仕込み、cronで定期的に実行する

こちらのサイトがわかりやすくまとまっています。
https://blog.supersonico.info/?p=1312

効果

マニュアル復旧不可能な改ざんが行われた場合、バックアップからリストアできる

追記:6/15/2016

特に更新をしていないのに、突然Snapshotが取れなくなることがあります。
スクリプトを直接たたくと、下記のようなエラーがでます。

A client error (AuthFailure) occurred when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials

ログインができないといっています。AIMでユーザーを作るとcredential(Access key, Secret Access Key)と呼ばれる認証キーをもらえるのですが、特に変えてないし、うーん。。 となった人、おそらくサーバ時間が実時間と大きくかけ離れていることが理由です。

まずntpdがインストールされているか確認しましょう。なければ下記のコマンドでインストール。(centOSを利用)

スタートさせます。

再起動時も上がってくるようにします。

これでもう一度スクリプトをたたくとエラーは消えます。

番外編:定期的なWPとプラグインの更新

WordPressでセキュリティホールになりやすいのはWPのコアファイル、テーマそれからプラグインです。これらをこまめにチェックし、極力最新の状態をキープするようにしましょう

当ページはWORDPRESS SECURITY: THE ULTIMATE GUIDEを参考に自身で調査実施した内容を掲載しています

Ads by Google

Ads by Google

関連記事

WordPres3.9.1にアップデートしたらRSSでエラーがでた時の解決方法

WordPressの最新版(2014年6/25時点)3.9.1にアップグレードしたところRSSフ

記事を読む

no image

WordPress ショートコードの中にショートコードを書く方法

.frame{ display: block; padding: 9.5px; margi

記事を読む

WordPress + Welcart 全部無料。10分でお手軽Eコマースサイトを構築する方法

WordPressとWelcartというプラグインで、早く、安く、簡単にEコマースサイトを構

記事を読む

WordPress cherry frameworkでカルーセルを使ったときにモバイルでスクロールしない問題を解決

カルーセル(Carousel)という言葉が一般的かわかりませんが、一定の画面内で画像をス

記事を読む

WordPressをカスタマイズしたい! そんな人が見るべき世界で人気のWPチュートリアルサイト ベスト10!

いまや世界中の個人、法人Webサイトで採用されているWordPressですが、その人気の1つにカス

記事を読む

WordPressへの投稿をFacebookページにフィードする方法

WordPressへの新規で投稿した際にFacebookページへも自動で書き込まれる

記事を読む

no image

WordPress Contact form 7 送信前に処理を実行する方法

WordPressの超有名プラグインContact form 7を利用されている方は多いと思

記事を読む

WordPress RSSフィードでエラーが発生した場合の解決方法

WordPressでできたサイトで突然RSSフィードが届かなくなりました。Webサイ

記事を読む

no image

WordPressの投稿を自動的にFacebookのウォールに書き込む方法

Facebook、Twitterといったソーシャルネットワークサービス(SNS)が浸透している現在、

記事を読む

no image

WordPress サイドバーにページを階層表示するプラグイン

自身のブログで使うことがあったので紹介します。 やりたいことはWordPressのページのリス

記事を読む

Ads by Google

Ads by Google

Ads by Google

Ads by Google
新着記事をRSSで受けとる
PAGE TOP ↑