WordPressをプラグインなしでセキュリティーを守る方法
WordPressは使用している人も多いため、不正アクセスをする人の標的となりやすいです。
強固なセキリティーを施すことにより、ブログの乗っ取りや改ざんを防ぐようにします。
この記事では、一般的なセキュリティープラグインを使用せずに、WordPressを様々な方法で保護する方法を紹介します。
WordPressをセキュリティーをアップさせる方法は沢山あります。この記事では、WordPressで簡単に実装できて効果のある方法を紹介します。
WordPressを安全にインストールする
WordPressはシンプルで簡単にインストールできます。そのため、ハッカーは初期設定では様々な、不正なアクセスを行う可能性があります。
なるべくWordPressの使用は、デフォルトのままにしないことが賢明です。
標準とは異なる設定により、不正アクセスすることをより困難にします。
ここでは、WordPressの新規インストールを設定する際にいくつかの注意する点を記載します。
テーブルのプレフィックス
DBで使用するテーブルの接頭辞は標準では「wp_」です。これを異なる文字列に変更します。
「wp-config.php」の「$table_prefix = ‘wp_’;」の「wp_」を違う文字に変更します。認証ユニークキー
WordPressの安全性を高めるために4つのセキュリティキーを設定します。4つのキーは異なるCookieに割り当てられ、WordPressのセキュリティを強化するために異なる場所で使用されるため、インストールごとに異なるキーがあることも重要です。
WordPressの「wp-config.php」には、「認証用ユニークキー」を設定する部分があります。
標準的に以下のような記述があれば問題ありません。以下のコードは一例です。
1 2 3 4 5 6 7 8 |
define('AUTH_KEY', '6|lHk!I,AMsX.#oVu/GWtb5xAg )ETbEE8_:Wx2_bHqUf{zu0pIT.!/:@`_7J67)'); define('SECURE_AUTH_KEY', 'S^Xt;[-(dC8*G(Gy=CrvVV};*iNa 0x.vQ/D!tM+~vGr,bpEP~=+8xcclNleO:~H'); define('LOGGED_IN_KEY', 'tm`R%W_6V*;k1|E2NtVFnMwytnSJbq^$w @CR:=/F3qiC0P4qGLo5nPaGo+{fU-M'); define('NONCE_KEY', 'sl:Yce)~O6~i^oauRS2j~2qxL};|n|R1]OAGEGR%2q+MFJgD/-6Fvn/$yD-)nxA8'); define('AUTH_SALT', '}^!JETk>;D+E[Ks!Fq.`-{oNBPc#9!5AMF-dh<z<%yi%;#xCs[X|B([R&>Ay58;d'); define('SECURE_AUTH_SALT', '{O,.8~ZLQRrZ=}&q$$O;+J-*N14<t smv+l_-ef-$oNPI-x.`$rs~dnKlO]>`)J'); define('LOGGED_IN_SALT', '!{n-a#X}+1o#*.5o..x- FU(22-scvjLV+;,oXy]t^aW+5U=e7D+nnRYm>3:Dx!D'); define('NONCE_SALT', '<~staIW/NeYs`b$CtV%Tx4I?KU]&8<]!h;x _>Egj^/[]W?;730_ez3DOWW(hM6m'); |
上記のような記述がない場合は、WordPress.org の秘密鍵サービスにアクセスして取得します。
これを「wp-config.php」内の「認証用ユニークキー」に記述します。
ファイルとフォルダのパーミッション設定
ファイルとディレクトリのパーミッションを適切に設定します。これにより、攻撃者がファイルやディレクトリを変更することを困難にします。
1.WordPressのデータがあるフォルダ(wp-contentやwp-adminやwp-config.phpがあるところ)のルートにテキストファイルで「robots.txt」を作成します。
このファイルに「Disallow」と記述します。
これで、検索エンジンロボットに見られることはありません。
2.フォルダのルートに「index.html」が無い場合は作成します。
これで、 ファイルを一覧で見られないようにできます。
wp-contentの名前変更
テーマやプラグイン、画像などのファイルがある「wp-content」フォルダの名前を変更します。
標準では、ブラウザのソースコードを見れば、href="http://〇〇.com/wp-content/uploads/2017/03/abc.jpg"等が記載されてあります。
WordPressを使用しているかどうかは、ソースコードの「wp-content」があれば容易に判断がつくので、知られたくない場合は変更する方が良いです。
1.FTPなどを使用して、「wp-content」の名前を変更します。
2.「wp-config.php」を開いて、次のコードを追加してください。「abc」は変更したフォルダ名に変えてください。
1 2 |
define ('WP_CONTENT_FOLDERNAME', 'abc'); define ('WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME); |
上記のコードを追加した後、次のコードを追加することができます:
1 2 |
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/'); define('WP_CONTENT_URL', WP_SITEURL . WP_CONTENT_FOLDERNAME); |
設定の変更を正しく行った場合は、wp-adminにログイン後に、テーマに移動してテーマを再起動する必要があります。また、プラグインによっては不具合が起きる可能性があります。そのため、「インストール済みプラグイン」ページに行き、全てのプラグインを再度有効化する必要があります。
サイトを新規に運営する場合は問題ありません。しかし、過去記事に画像を投稿していている場合は、imgのURLが変わったために、画像表示がエラーになっているはずです。URLを正しく置換してください。
別のリネーム方法
「wp-content」のフォルダ名を変更するのに別の方法もあります。
以下のコードを「wp-config.php」に記述します。「abc」は任意で変更してください。
1 2 3 |
/* フォルダチェンジ */ define( 'WP_CONTENT_DIR', dirname(__FILE__) .'/abc' ); define( 'WP_CONTENT_URL', 'ここにサイトのURLを記述する/abc'); |
別のリネーム方法2
「wp-content」のフォルダ名を変更するのに別の方法もあります。
以下のコードを「wp-config.php」に記述します。「abc」は任意で変更してください。
1 2 3 |
/* フォルダチェンジ */ define('WP_CONTENT_DIR', ABSPATH . 'abc'); define('WP_CONTENT_URL', 'ここにサイトのURLを記述する/abc'); |
注意事項
「wp-config.php」にリネームコードを記述する際は以下のコード部分の直前に記入してください。
1 2 3 |
/** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); |
安全なアクセス
バージョン2.6では、インストールのバックエンドを保護するための新しいオプションが追加されました。SSL経由のアクセスは、データを送信するための暗号化プロトコルです。これにより、全てのデータはバックエンドで暗号化されます。
1.「wp-config.php」を開いて、次のコードを追加してください。
1 |
define ('FORCE_SSL_LOGIN', true); |
インストール済みの保全
インストール済みのブログも簡単な手順で安全にすることができます。
ブログが既に運営していて、DBにデータがある場合は、テーブル接頭辞を変更すると致命的なエラーになります。
この場合は、データベースをSQLで変更します。
1.標準設定されているのテーブルのプレフィックスを以下のように変更します。
1 2 3 4 5 6 7 8 9 10 |
RENAME TABLE wp_comments to wp_i1d_comments; RENAME TABLE wp_links to wp_i1d_links; RENAME TABLE wp_options to wp_i1d_options; RENAME TABLE wp_postmeta to wp_i1d_postmeta; RENAME TABLE wp_posts to wp_i1d_posts; RENAME TABLE wp_terms to wp_i1d_terms; RENAME TABLE wp_term_relationships to wp_i1d_term_relationships; RENAME TABLE wp_term_taxonomy to i1d_term_taxonomy; RENAME TABLE wp_usermeta to wp_i1d_usermeta; RENAME TABLE wp_users to wp_i1d_users; |
2.次にフィールドをリネームします。
この設定で、テーブルのフィールドを識別するプレフィックスが変更されます。
1 2 |
UPDATE wp_i1d_options SET option_name = REPLACE(option_name, 'wp_', 'wp_i1d_'); UPDATE wp_i1d_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'wp_i1d_'); |
3.DBを検索して、他の値を変更します。
1 2 |
SELECT * FROM wp_i1d_options WHERE option_name LIKE 'wp_%'; SELECT * FROM wp_i1d_usermeta WHERE meta_key LIKE 'wp_%'; |
ユーザー名の変更
デフォルトのインストールのユーザー名はadminです。インストール後、このユーザーを削除して、別名に変更します。
1.DBからユーザー名とIDを以下のように変更します。
1 2 3 4 |
UPDATE 'wp_users' SET 'ID' = '815' WHERE 'wp_users'.'ID' = 1; UPDATE 'wp_usermeta' SET 'user_id' = '815' WHERE 'wp_usermeta'.'user_id' = 1; UPDATE 'wp_posts' SET 'post_author' = '815' WHERE 'wp_posts'.'post_author' = 1; UPDATE 'wp_links' SET 'link_owner' = '815' WHERE 'wp_links'.'link_owner' = 1; |
WordPressのバージョンを表示しない
WordPressのバージョンは、ブログの多くの部分、バックエンド、フィード、テーマに表示されます。各バージョンにはバグがあり、それを攻撃者が知っていると良くありません。
1.functions.phpに以下のコードを記載すると、バージョンは表示されなくなります。
1 |
add_filter( 'the_generator', create_function('$a', "return null;") ); |
また、全てのエリアから完全に削除する場合は、プラグイン「Secure WP」を使用すると良いです。
エラーメッセージを無効化
エラーが表示された場合は、WordPressのログインを簡単にするためのヒントを提供することになります。ユーザにとってエラー情報は有用ですが、ハッカーにとっても有用です。
これらのエラーメッセージを表示必要があるかどうかを検討してください。
それ以外の場合は、前述のプラグイン「Secure WP」で無効にすることができます。
1.「wp-config.php」内に下記のコードを記述をします。
1 |
define('WP_DEBUG', false); |
.htaccessの設定
「.htaccess」を使用すると、セキュリティー設定ができて安全性が強化されます。
1.ログインページ「wp-login.php」のアクセス時に、ベーシック認証を設定します。
1 2 3 4 5 6 7 |
# protect wp-login.php <files wp-login.php> AuthName "Admin-Bereich" AuthType Basic AuthUserFile /your_lokal_path/.htpasswd require valid-user </files> |
2.「wp-config.php」のアクセスを保護します。
1 2 3 4 5 |
# protect wp-config.php <files wp-config.php> Order deny,allow deny from all </files> |
3.ファイルやフォルダのアクセスを保護します。
1 2 3 4 5 6 7 8 |
Order Allow,Deny Deny from all <Files ~ "js/tinymce/*.$"> Allow from all </Files> <Files ~ "\.(css|jpe?g|png|gif|js)$"> Allow from all </Files> |
4.ログインページの変更
ログインするURLを変更することにより、ログイン画面を見つけられないようにします。
以下のコードを追加します。「wp-login.php?abc」がログイン時のURLです。別のURLに変更したい場合は「abc」の部分だけ、任意で変更してください。
「ここにサイトのURLを記入する」を自サイトのURLに変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^enter/?$ /wp-login.php?abc [R,L] RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ RewriteRule ^dashboard/?$ /wp-login.php?abc&redirect_to=/wp-admin/ [R,L] RewriteRule ^dashboard/?$ /wp-admin/?abc [R,L] RewriteRule ^register/?$ /wp-login.php?abc&action=register [R,L] RewriteCond %{SCRIPT_FILENAME} !^(.*)admin-ajax\.php RewriteCond %{HTTP_REFERER} !^(.*)ここにサイトのURLを記入する/wp-admin RewriteCond %{HTTP_REFERER} !^(.*)ここにサイトのURLを記入する/wp-login\.php RewriteCond %{HTTP_REFERER} !^(.*)ここにサイトのURLを記入する/enter RewriteCond %{HTTP_REFERER} !^(.*)ここにサイトのURLを記入する/dashboard RewriteCond %{HTTP_REFERER} !^(.*)ここにサイトのURLを記入する/register RewriteCond %{QUERY_STRING} !^abc 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?abc [R,L] </IfModule> |
5.海外からの管理者ログインを禁止します。
日本からのみ管理者ログインができるようにします。以下のファイルをダウンロードして、「.htaccess」にコードを追加します。
海外からの管理者ログインを禁止.text ダウンロード
もし、海外からの管理者ログインと書き込みを禁止したい場合は、
<Files "wp-login.php">の部分を<Limit POST>に変更してください。
これで海外からの不正ログインを防ぐことが出来ます。
まとめ
WordPressは、アクセス数が多くなってくると、次第に攻撃されるリスクも高くなってきます。
全てセキュリティーを完全にすることは難しいかもしれません。しかし、必要なセキュリティーを設定した上でサイトを守ることが大切です。
これらのセキュリティー設定は、プラグインを使用すれば簡単に実装することができます。
但し、重くなる原因にもなりますので、必要に応じて手動でできることは装備することが良いと思います。
Webサイトを乗っ取られたり、改ざんされてからでは遅いので、普段からしっかり設定しておくことが大切です。
コメント
一部コードに不具合がありました。訂正してお詫びします。