簡単な作業でWordPressのセキュリティをアップするチップス
Post on:2009年11月11日
ブログツール「WordPress」のインストール時に、簡単な作業でセキュリティをアップするチップスをWP Engineerから紹介します。
Small Security Tipps for your WordPress Install
以下、そのポイントを意訳したものです。
はじめに
WordPressの標準のインストールは非常に簡単で、WordPressの人気の要因の一つともいえます。しかしながら、インストールを行う際に少し手を加えることで、不正なアクセスをより難しいものにすることができます。
テーブルのプレフィックス
DBで使用するテーブルのプレフィックスを標準の「wp_」から異なる文字列に変更します。
設定方法
「wp-config.php」の「$table_prefix = 'wp_';」の「wp_」を変更します。
認証用ユニークキー
WordPressの安全性をアップするために、4つのセキュリティキーを設定します。
設定方法
「wp-config.php」内の「認証用ユニークキー」の説明に従って、設定を行います。
下記ページにアクセスし、表示された文字列を「wp-config.php」に記述します。
WordPress.org の秘密鍵サービス
ファイルとフォルダのパーミッション
ファイルとフォルダは適切にパーミッションを設定します。限定されたパーミッションは攻撃者がファイルやフォルダを変更するのを難しくします。
設定方法
WordPressの管理関連にはテキストファイル「robots.txt」を作成し「Disallow」と記述して、検索エンジンのロボットに見られないようにします。
また、フォルダのルートに「index.html」が無い場合は設置し、ファイルを一覧で見ることができないようにします。
wp-contentのリネーム
プラグインやテーマなど、WordPressの管理関連のファイルがある「wp-content」フォルダの名前を変更します。
設定方法
「wp-config.php」内に下記の記述をします。「test」は任意で変更してください。
1 2 3 4 |
<textarea name="code" class="html" cols="60" rows="5"> define('WP_CONTENT_DIR', ABSPATH . 'test'); // wp-content Directory define('WP_CONTENT_URL', 'http://example.com/test'); // wp-content URL </textarea> |
セキュアなアクセス
バージョン2.6でバックエンドを安全に保つためにSSLのオプションが加えられました。これによりSSLでの接続が可能となり、バックエンドのデータは暗号化されます。
設定方法
「wp-config.php」内に下記の記述をします。
1 2 3 |
<textarea name="code" class="html" cols="60" rows="5"> define ('FORCE_SSL_LOGIN', true); </textarea> |
インストール済みの保全
既にWordPressを運用している場合、データベースをSQLで変更します。
変更方法
既存のテーブルのプレフィックスを変更します。
1 2 3 4 5 6 7 8 9 10 11 12 |
<textarea name="code" class="html" cols="60" rows="5"> 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; </textarea> |
WordPressではテーブルのフィールドを識別するためにプレフィックスを使用している箇所があるため、フィールドもリネームします。
1 2 3 4 |
<textarea name="code" class="html" cols="60" rows="5"> 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_'); </textarea> |
また、プラグインが参照している場合もあるので、DBを検索し、それぞれの値を変更します。
1 2 3 4 |
<textarea name="code" class="html" cols="60" rows="5"> SELECT * FROM wp_i1d_options WHERE option_name LIKE 'wp_%'; SELECT * FROM wp_i1d_usermeta WHERE meta_key LIKE 'wp_%'; </textarea> |
ユーザー名の変更
ユーザー名のデフォルトは「admin」となっています。このユーザー名は使用せずに、別のユーザー名を使用します。
変更方法
DBからユーザー名とIDを変更します。
1 2 3 4 5 6 |
<textarea name="code" class="html" cols="60" rows="5"> 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; </textarea> |
バージョンを開示しない
WordPressのバージョンによってはバグがあり、それをむやみに攻撃者に知られないようにします。
変更方法
バージョン情報は管理者以外は必要ではないので、表示しないようにします。
プラグイン「Secure WP」を使用すると、全てのエリアから削除します。
1 2 3 |
<textarea name="code" class="html" cols="60" rows="5"> add_filter( 'the_generator', create_function('$a', "return null;") ); </textarea> |
エラーメッセージを消す
WordPressのエラーやインフォメーションのメッセージは有用なものが表示されますが、攻撃者にとっても有用なものになってしまうため、非表示にします。
変更方法
「wp-config.php」内に下記の記述をするか、削除します。
メッセージは開発時のみ有効にします。
1 2 3 |
<textarea name="code" class="html" cols="60" rows="5"> define('WP_DEBUG', false); </textarea> |
.htaccessの設定
「.htaccess」でさまざまな設定を行い、安全性を強化します。
変更方法
ログインページ「wp-login.php」のアクセス時に、ベーシック認証を設定します。
1 2 3 4 5 6 7 8 9 |
<textarea name="code" class="html" cols="60" rows="5"> # protect wp-login.php <files wp-login.php> AuthName "Admin-Bereich" AuthType Basic AuthUserFile /your_lokal_path/.htpasswd require valid-user </files> </textarea> |
「wp-config.php」のアクセスを保護します。
1 2 3 4 5 6 7 |
<textarea name="code" class="html" cols="60" rows="5"> # protect wp-config.php <files wp-config.php> Order deny,allow deny from all </files> </textarea> |
ファイルやフォルダのアクセスを保護します。
1 2 3 4 5 6 7 8 9 10 |
<textarea name="code" class="html" cols="60" rows="5"> Order Allow,Deny Deny from all <Files ~ "js/tinymce/*.$"> Allow from all </Files> <Files ~ "\.(css|jpe?g|png|gif|js)$"> Allow from all </Files> </textarea> |
sponsors