Intereting Posts
Изменить Подробнее в теме ребенка Изменить уведомление об автоматическом обновлении администратора Модуль электронного обучения Пользовательский повтор не работает / событие Wp Cron Заказывайте сообщения по 2 настраиваемым полям, и если одно настраиваемое поле равно нулю в другом настраиваемом поле Гиперссылка для выполнения PHP Создайте больше метабоксов по мере необходимости Хотите использовать wp_get_current_user () в фильтрах запросов Как создать меню со страницами и статьями? Ссылки на другой сайт во всем мире на сайте WordPress Нечетный PHP-код для отображения HTML мета-бокса Как отобразить список сообщений в макете таблицы (несколько запросов в одном цикле) Есть ли способ отключить определенное поведение прокрутки? Уменьшение количества больших изображений, прикрепленных к сообщениям, навалом? Контактный формуляр 7 Плагиновые электронные письма, которые не принимаются некоторыми учетными записями

Разрешить вход в систему пользователям, которые не принадлежат к whitelisted ips

У меня есть конфиг apache, где я переадресовываю IP-адреса в подпапку, отличную от WordPress, такую ​​как:

<Directory /var/www/html/link> Order allow,deny Require all granted #Our Network Allow from ip-address/22 Allow from ip-address/24 Allow from ip-address/24 Allow from ip-address/24 #and even longer list of IPs and other folders </Directory> 

Я также хотел бы разрешить людям, которые не принадлежат к этому IP-блоку, но имеют учетную запись пользователя. Есть какой-либо способ сделать это?

Простой и быстрый, но не 100% безопасный метод:

Этот метод не на 100% безопасен, но для большинства пользователей (например, 99%) он будет работать.

Здесь, в основном, вы будете использовать файл .htaccess внутри ограниченного каталога , например: /var/www/html/link со следующим CODE:

  SetEnvIf Cookie "^.*wordpress_logged_in.*$" WP_LOGGED_IN=maybe Order allow,deny Require all granted # Our Network #Allow from ip-address/22 #Allow from ip-address/24 #Allow from ip-address/24 #Allow from ip-address/24 # and even longer list of IPs # Perhaps WordPress is logged in according to cookie: works for trivial cases, but not 100% secure Allow from env=WP_LOGGED_IN 

Поэтому в основном вместо конфигурации apache вы помещаете разрешенные IP-сети в этот файл .htaccess (без блока <Directory> ), который также проверяет файл cookie в WordPress с SetEnvIf директивы SetEnvIf . Если IP не находится в матче, и cookie входа в систему также не найден, с этим КОДОМ оставшимся посетителям будет отказано в доступе.

Никаких изменений в файле .htaccess корневого веб-каталога не требуется.

Безопасный метод:

Если вам нужен 100% безопасный метод, тогда лучше всего сделать это с помощью PHP.

Сначала удалите все существующие ограничения IP (для соответствующего каталога) из файла конфигурации apache.

Затем используйте следующий код в файле .htaccess корневого веб-каталога.

  <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^link/access\.php$ - [L] RewriteRule ^link/.*$ /link/access.php [L] # Your remaining rewrite rules for WordPress </IfModule> 

Затем в файле /var/www/html/link/access.php используйте следующий PHP-код:

 <?php function network_match( $ip, $networks ) { foreach( $networks as $network ) { $net_parts = explode( '/', $network ); $net = $net_parts[0]; if( count( $net_parts ) === 2 ) { $netmask = $net_parts[1]; if( ( ip2long( $net ) & ~ ( ( 1 << ( 32 - $netmask ) ) - 1 ) ) === ( ip2long( $ip ) & ~ ( ( 1 << ( 32 - $netmask ) ) - 1 ) ) ) { return true; } } else if( $ip === $net ) { return true; } } return false; } $networks = array( // Put your allowed networks HERE "192.168.0.0/24", "127.0.0.1" ); $allowed = false; if( network_match( $_SERVER['REMOTE_ADDR'], $networks ) ) { $allowed = true; } else { // assuming WordPress is installed one directory above // if not, then change accordingly require_once dirname( dirname( __FILE__ ) ) . "/wp-load.php"; if( is_user_logged_in() ) { $allowed = true; } } if( $allowed ) { // HERE you SERVE THE REQUESTED FILE WITH PHP echo "You are allowed"; } else { die("Access denied!"); } 

Как и сейчас, этот CODE в основном внутренне перезаписывает все запросы в каталог /var/www/html/link/ в файл /var/www/html/link/access.php и проверяет права доступа к IP и вход в WordPress.

Вы можете изменить этот PHP-код (в строке, которая гласит: // HERE you SERVE THE REQUESTED FILE WITH PHP ), чтобы обслуживать запрошенные файлы из каталога link .

Вы можете проверить это сообщение на серверные файлы из PHP CODE .

Насколько я знаю, .htaccess (или apache config) имеет приоритет, и вы не можете легко его переопределить. Существует два решения:

1) Просто используйте файл simple-browser.php (измените путь к защищенной директории по мере необходимости)

2) Не используйте конфигурацию apache, вместо этого используйте .htaccess внутри этого каталога, вот как это сделать:

создать .htaccess в этой папке:

 <Directory "./"> Order allow,deny Require all granted #Our Network Allow from ip-address/22 ........ #DONT_REMOVE_ME_START #DONT_REMOVE_ME_END </Directory> 

Сначала добавьте контент в свой файл functions.php и после этого отправьте пользователей по этой ссылке: yoursite.com/?check_permission :

 define('path_to_target_htaccess', ABSPATH.'path/to/protected/folder/.htaccess'); add_action('init', 'start_validation'); function start_validation(){ if (isset($_GET['check_permission'])){ if(is_user_logged_in()){ $new_content= str_replace( '#DONT_REMOVE_ME_START', '#DONT_REMOVE_ME_START'."\r\n".'Allow from '.$_SERVER['REMOTE_ADDR'], file_get_contents(path_to_target_htaccess) ); file_put_contents(path_to_target_htaccess, $new_content); header("location: /path/to/folder"); exit; } } } 

ps один раз в неделю или день, запустите функцию, которая удалит все строки между #DONT_REMOVE_ME_START и #DONT_REMOVE_ME_END

Я не был в этой ситуации и знаю больше о WP, чем Apache, но вот примерно то, как я к этому подхожу.

  1. Используйте mod_setenvif для установки переменной среды на основе запрошенного URL-адреса, содержащего определенный код, например «wp-login-! 637 # 6».
  2. Разрешить доступ, если переменная среды верна. Это не удастся.
  3. Перенаправляйте на специальную страницу в WP install, передавая исходный url в качестве переменной запроса, например: Redirect "foo.html" "wp/specialpage?foo.html" .
  4. Теперь вы находитесь в WP и можете проверить, зарегистрирован ли текущий пользователь. Если нет, разрешите вход или отображение «запрещено». Если вы вошли в систему, переадресовывайтесь на исходный url, добавив код 'wp-login-! 637 # 6'
  5. Теперь вы вернулись на первый шаг, но на этот раз переменная окружения будет установлена ​​правильно, и вы получите доступ к файлу