WordPressサイトを運営する上で、特定のページへのアクセスを制限したいケースがあります。本記事では、プラグインを使用せずに、WordPressの機能を活用してページ単位でIPアドレスによるアクセス制限を実装する方法を解説します。💡
目次
なぜページ単位のIP制限が必要か?
セキュリティ強化:機密情報を含むページへのアクセスを特定のIPアドレスに限定できます。
コンテンツ管理:地域限定のコンテンツや、社内向けページなどを効果的に管理できます。
柔軟性:.htaccessによる制限よりも細かい制御が可能です。
実装手順
準備作業
アクセスをブロックした際のリダイレクト先ページを作成します:
WordPressの管理画面から「固定ページ」を新規作成
スラッグを「ipblock」に設定
アクセス制限メッセージなどを記載して公開
コードの実装
functions.php に以下のコードを追加します:
▼サンプルコード
<?php
function block_access_by_ip() {
if(is_admin()) { return; }
$ip_list = array(
'123.456.789.001',
'123.456.789.002'
);
if(in_array($_SERVER["REMOTE_ADDR"], $ip_list, TRUE)) {
return;
}
if(is_page(array('restricted-page-1', 'restricted-page-2'))) {
wp_safe_redirect(esc_url(home_url('/ipblock/')));
exit();
}
}
add_action('template_redirect', 'block_access_by_ip', 1);
?>
コードの解説
$ip_list
:アクセスを許可するIPアドレスのリストを定義
in_array()
:現在のアクセス元IPが許可リストに含まれているかチェック
is_page()
:制限をかけたいページのスラッグを指定
wp_safe_redirect()
:条件に合致した場合、ブロックページにリダイレクト
補足
- 💡is_category()を使用して、特定のカテゴリーページに制限をかけられます。
- 💡is_page()やis_category()を組み合わせて、複雑な条件設定も可能です。
- 💡データベースやAPIを使用して、許可IPリストを動的に管理することも考えられます。
セキュリティ上の注意点
$_SERVER["REMOTE_ADDR"]
は偽装される可能性があるため、重要度の高い情報保護には不十分な場合があります。
より強固なセキュリティが必要な場合は、VPNや専用のセキュリティソリューションの導入を検討してください◎