WordPress のセキュリティを向上させるための最適な .htaccess スニペット
WordPress のセキュリティは、初心者ブロガーにとって最も脆弱な要素の 1 つです。監視されていない WordPress インストールでは、かなりの数の潜在的な脆弱性が放置されています。ほとんどの WordPress インストール チュートリアルでは、数分で WordPress を展開するための迅速かつ簡単な方法が説明されています。しかし、重要なセキュリティ要素がいくつか欠けています。たとえば、ディレクトリの参照や「admin」ユーザー名の使用は、重大なセキュリティの抜け穴とみなされます。今日は、WordPress ブログのセキュリティの向上に役立つ 10 の .htaccess コード スニペットを見ていきます。始める前に、htaccess ファイルとは何かを簡単に見てみましょう。
.htaccess ファイルとは何ですか?
htaccess ファイルは、Apache Web サーバーがディレクトリごとに解釈するオプションの構成ファイルです。このファイルには、ディレクトリのパスワード保護、IP のブロック、ファイルやフォルダーのパブリック アクセスのブロックなど、さまざまな設定を保存できます。従来、.htaccess ファイルは WordPress のベース インストール ディレクトリに存在します。デフォルトではパーマリンク構造が保存されます。
ヒント:チュートリアルを開始する前に、現在の .htaccess ファイル(存在する場合)を Dropbox などのクラウド ストレージ サービスにバックアップしてください。これは、特定のコード スニペットによってサイトが破損した場合に、最後に動作したことがわかっている .htaccess ファイルにロールバックするためです。さぁ、始めよう。
1. 悪質なボットをブロックする
.htaccess ファイルの最も優れた用途の 1 つは、複数の IP アドレスによるサイトへのアクセスを拒否できることです。これは、既知のスパマーやその他の不審または悪意のあるアクセスの発信元をブロックする場合に役立ちます。コードは次のとおりです。
# Block one or more IP address.
# Replace IP_ADDRESS_* with the IP you want to block
<Limit GET POST>
order allow,deny
deny from IP_ADDRESS_1
deny from IP_ADDRESS_2
allow from all
</Limit>
ここで、IP_ADDRESS_1 は、サイトへのアクセスを禁止する最初の IP です。 IP は必要なだけ追加できます。これらの IP アドレスを使用するユーザー エージェント (ブラウザー) が何であっても、サーバーから単一のファイルにアクセスすることはできません。 Web サーバーはすべてのアクセスを自動的に拒否します。
2. ディレクトリの参照を無効にする
これは、WordPress サイトで最も脆弱なセキュリティ上の欠陥の 1 つです。デフォルトでは、Apache Web サーバーはディレクトリの参照を有効にします。これは、Web サーバーのルート ディレクトリ (ホーム ディレクトリと呼ばれることもあります) 内のすべてのファイルとフォルダーが登録可能であり、訪問者がアクセスできることを意味します。メディアのアップロードやテーマやプラグインのファイルを他人に閲覧されたくないので、それは望ましくありません。
WordPress を実行している個人またはビジネスの Web サイトをランダムに 10 個選択した場合、そのうち 6 ~ 8 個ではディレクトリの参照が無効になっていません。これにより、誰でも簡単に wp-content/uploads フォルダや、デフォルトの index.php ファイルを持たないその他のディレクトリを盗聴できるようになります。 。実際、ご覧のスクリーンショットは、私が修正を推奨する前に、私のクライアントのサイトの 1 つからのものです。ディレクトリの参照を無効にするコード スニペット:
# Disable directory browsing
Options All -Indexes
3. wp-content から選択したファイルのみを許可する
ご存知のとおり、wp-content フォルダーには、テーマ、プラグイン、およびすべてのメディアのアップロードの大部分が含まれています。もちろん、人々が制限なくアクセスできるようにすることは望ましくありません。ディレクトリの参照を無効にするだけでなく、すべての種類のファイルへのアクセスを拒否し、いくつかのファイルを保存することもできます。基本的に、JPG、PDF、DOCX、CSS、JS などのファイルのブロックを選択的に解除し、残りのファイルを拒否できます。これを行うには、次のコード スニペットを .htaccess ファイルに貼り付けます。
# Disable access to all file types except the following
Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
Allow from all
</Files>
コードを含む新しい .htaccess ファイルを作成し、それをwp-content フォルダーに貼り付ける必要があります。これを基本インストール ディレクトリに置かないでください。そうしないと機能しません。 「rar」の後に「|」を追加することで、任意のファイル タイプをリストに追加することもできます。上記のリストには、必要なファイル (XML、CSS、JavaScript、一般的な画像およびドキュメント形式、そして最後に最もよく使用されるアーカイブ形式) が含まれています。
4. wp-include へのすべてのアクセスを制限する
wp-includes フォルダー には、WordPress のコア バージョンを実行するために厳密に必要なファイルのみが含まれており、プラグインやテーマは含まれていません。デフォルトのテーマはまだwp-content/theme ディレクトリに存在していることに注意してください。したがって、訪問者 (あなたを含む) は wp-include フォルダのコンテンツにアクセスする必要はありません。次のコード スニペットを使用してアクセスを無効にできます。
# Block wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
5. 選択した IP アドレスのみに wp-admin へのアクセスを許可する
wp-admin フォルダーには、WordPress ダッシュボードを実行するために必要なファイルが含まれています。ほとんどの場合、アカウントを登録しない限り、訪問者は WordPress ダッシュボードにアクセスする必要はありません。優れたセキュリティ対策は、選択した少数の IP アドレスのみが wp-admin フォルダにアクセスできるようにすることです。 WordPress ダッシュボードにアクセスする必要がある人 (編集者、寄稿者、その他の管理者) の IP を許可できます。このコード スニペットは、固定 IP のみに wp-admin フォルダへのアクセスを許可し、その他の地域へのアクセスを拒否します。
# Limit logins and admin by IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 302.143.54.102
allow from IP_ADDRESS_2
</Limit>
新しい .htaccess ファイルを作成し、基本インストール ディレクトリではなく、wp-admin フォルダに貼り付けてください。後者の場合、あなた以外の誰もあなたのサイトを閲覧できなくなります。検索エンジンも同様です。確かにそんなことは望んでいませんよね。この措置の欠点は次のとおりです。
- サイトで新規ユーザー登録を許可または促進している場合、ユーザー数を追跡することはほぼ不可能になります。たとえば、WPExplorer では、素晴らしい無料テーマをダウンロードしたい場合は、登録する必要があります。
- 動的 IP アドレスを持つユーザー (主に PPP または PPPoE プロトコルを使用する ADSL ブロードバンド ユーザー) は、ログアウトして ISP にログインするたびに IP が変更されます。確かに、これらすべての IP を追跡して htaccess ファイルに追加するのは非現実的です。
- モバイル ブロードバンド: 3G または 4G のどちらを使用している場合でも、IP アドレスは接続している現在の携帯電話の基地局によって異なります。あなたが旅行しているとします。あなたの IP は、出発地から数マイル移動するたびに常に変化します。繰り返しますが、htaccess ファイルを追跡することはほぼ不可能です。
- 公衆 Wi-Fi ホットスポット: 公共 Wi-Fi ホットスポットを使用してインターネットに接続するときに認証情報を使用することは、絶対に禁止です。小さなソフトウェアを持った子供が、入力したすべての文字を抽出してしまう可能性があるからです。言うまでもなく、各 Wi-Fi ホットスポットには固有の IP アドレスが割り当てられます。
ありがたいことに、これらすべての欠点 (最初の欠点を除く) は、VPN を使用することで修正できます。単一の IP アドレスのみを使用して接続するように VPN を設定している場合は、それを htaccess ファイルに追加するだけで、すべての問題が解決されます。
6. wp-config.php と .htaccess を誰からも保護する
wp-config.php ファイルには、WordPress サイトの最も機密性の高いアクセス認証情報が含まれています。これには、データベース名、アクセス資格情報、その他のさまざまな重要なデータ、その他の設定が含まれています。いかなる場合でも、他の人がこのファイルを閲覧することを望まないでください。そしてもちろん、このすべてのセキュリティのソースである .htaccess ファイル自体へのパブリック アクセスを無効にする必要があります。次のコードを使用して、wp-config.php へのアクセスを無効にすることができます。
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
すべての htaccess ファイルへのアクセスを拒否するには (一部のファイルは wp-admin フォルダーやその他のフォルダーに存在する可能性があることに注意してください)、次のコード スニペットを使用します。
# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
7. 画像のホットリンクを拒否する
最もクールな .htaccess ファイル ハックの 1 つであるこれは、コンテンツ スクレーパーを脚の間に尻尾を挟んで実行させます。誰かがあなたのサイトの画像を使用すると、帯域幅が消費され、ほとんどの場合、その使用に対するクレジットは得られません。このコード スニペットはその問題を解決し、ホットリンクが検出されたときにこの画像を送信します。
# Prevent image hotlinking script. Replace last URL with any image link you want.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/MlQAH71.jpg [NC,R,L]
8. ブラウザのキャッシュを有効にする
クライアント側キャッシュとも呼ばれるこの .htaccess ハックにより、WordPress サイトに推奨されるブラウザー キャッシュ オプションが有効になります。 HTML サイトなどの他のプロジェクトでも使用できます。
# Setup browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>
9. メンテナンスページにリダイレクトします
ウェブホストを移行するとき、またはメンテナンス タスクを実行するときは、静的な「メンテナンスのため停止」HTML ファイルを作成して、ウェブサイトがアップグレードまたはメンテナンス作業中であることを訪問者に通知することを常にお勧めします。単純に、maintenance.html ファイル (または他のファイル名) を作成し、WordPress のベース インストール ディレクトリにアップロードします。次のスニペットを .htaccess ファイルに貼り付けます。操作が終了したら、必ずこれらの行を削除するかコメントアウトして、全体の操作に戻ってください。各行の先頭に「#」を追加することでコメントアウトできます。
# Redirect all traffic to maintenance.html file
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]
10. カスタムエラーページ
.htaccess ファイルを使用して、403、404、500 などのエラーに対して使いやすいカスタム エラー ページを構成することもできます。エラー ページ (error.html としましょう) を準備したら、それを WordPress のベース インストール ディレクトリにアップロードします。次に、次のコード スニペットを .htaccess ファイルに追加して、カスタム エラー ページを有効にします。
# Custom error page for error 403, 404 and 500
ErrorDocument 404 /error.html
ErrorDocument 403 /error.html
ErrorDocument 500 /error.html
結論:
今日は、WordPress サイトを強化するための最もクールな htaccess ハックをいくつか学びました。各モジュールをテストする前後に .htaccess ファイルのバックアップをとりながら、各モジュールを 1 つずつ試してみることをお勧めします。これは、.htaccess ファイルが非常に重要であるためです。 「#」文字が欠けていたり、「」が間違って配置されていたりすると、サイトの整合性が損なわれる可能性があります。外出先で WordPress ダッシュボードに頻繁にアクセスする場合は、wp-admin フォルダーへの選択的 IP を有効にしないことをお勧めします。
では、この投稿についてどう思いますか? htaccess ファイルを編集する手間をかける価値があると思いますか?より良いセキュリティのヒントをご存知ですか?あなたからの御一報をお待ちしています。