Если вам не требуется полностью закрыть доступ к REST на вашем сайте, а нужно лишь обезопасить его, можно ограничить доступ к конкретному END Point.
Важно помнить: Отключение сервисов API может повлиять на работу плагинов и тем, которые используют этот API. Тщательно протестируйте любые изменения в непроизводственной среде, прежде чем внедрять их на рабочем сайте.
Первый вариант:
1. Отключение всего API пользователей:
Для этого добавьте в functions.php вашей темы следующий код:
1 2 3 4 5 6 7 8 9 10 11 |
<?php add_filter( 'rest_endpoints', function( $endpoints ) { if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) { unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ); } return $endpoints; }); ?> |
Не забудьте проверить закрывающие и открывающие тэги <?php / ?>
Этот код перехватывает список конечных точек REST API и удаляет конечные точки /wp/v2/users
и /wp/v2/users/{id}
. Обратите внимание, что это повлияет на всех пользователей, включая администраторов.
Я не рекомендую править файлы темы, вместо этого просто добавьте свой плагин, который будет неизменно подключаться к любой вашей теме и не будет зависеть от обновлений. Это займет 10 минут, но сэкономит кучу времени.
2. Ограничение доступа к API пользователей на основе ролей пользователей:
Более гибкий подход, позволяющий ограничить доступ к API только для определенных ролей пользователей.
- Через
functions.php
или плагин:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php add_filter( 'rest_pre_dispatch', 'restrict_user_api', 10, 3 ); function restrict_user_api( $result, $server, $request ) { if ( strpos( $request->get_route(), '/wp/v2/users' ) !== false ) { // Проверка ролей пользователей. Пример: только администраторы могут получать доступ if ( ! current_user_can( 'administrator' ) ) { return new WP_Error( 'rest_forbidden', 'У вас нет прав для доступа к этой конечной точке.', array( 'status' => 401 ) ); } } return $result; } ?> |
Этот код перехватывает каждый запрос REST API и проверяет, содержит ли маршрут /wp/v2/users
.
Если содержит, проверяет, имеет ли текущий пользователь роль администратора. Если нет, возвращается ошибка rest_forbidden
.
Вы можете изменить current_user_can( 'administrator' )
для проверки других ролей пользователей, таких как editor
, author
, contributor
или subscriber
.
3. Ограничение доступа к API пользователей на основе IP-адреса:
Этот подход ограничивает доступ к API только для определенных IP-адресов. Имейте в виду, что это может быть сложно, особенно если у вас динамический IP-адрес.
- Через
functions.php
или плагин:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php add_filter( 'rest_pre_dispatch', 'restrict_user_api_by_ip', 10, 3 ); function restrict_user_api_by_ip( $result, $server, $request ) { if ( strpos( $request->get_route(), '/wp/v2/users' ) !== false ) { // Список разрешенных IP-адресов $allowed_ips = array( '127.0.0.1', // Localhost '192.168.1.100', // Пример IP-адрес ); $user_ip = $_SERVER['REMOTE_ADDR']; if ( ! in_array( $user_ip, $allowed_ips ) ) { return new WP_Error( 'rest_forbidden', 'Доступ к этой конечной точке запрещен с вашего IP-адреса.', array( 'status' => 403 ) ); } } return $result; } ?> |
Этот код проверяет IP-адрес пользователя и сравнивает его со списком разрешенных IP-адресов. Если IP-адрес не находится в списке, возвращается ошибка rest_forbidden
.
4. Использование плагина:
Существуют плагины, которые могут помочь вам управлять доступом к REST API, включая API пользователей. Некоторые популярные варианты:
- Disable REST API: Просто отключает весь REST API, включая API пользователей.
- REST API Toolbox: Предлагает более детальный контроль над различными аспектами REST API, включая возможность отключать определенные конечные точки.
- Advanced Access Manager (AAM): Мощный плагин для управления ролями и возможностями пользователей, который также может использоваться для контроля доступа к REST API.
Рекомендации по ограничению:
- Не рубите с плеча ) : Вместо того, чтобы сразу отключать всё и вся, попробуйте ограничить доступ на основе ролей пользователей или IP-адресов.
- Тщательно протестируйте: Проверьте все изменения, чтобы убедиться, что они не влияют на функциональность вашего сайта.
- Документируйте свои изменения: Оставьте комментарии в коде или в блокноте, объясняющие, почему вы отключили или ограничили доступ, как и когда, это поможет, в случае, если придётся откатить изменения.
- Подумайте о последствиях: Отключение API пользователей может повлиять на работу плагинов и тем, которые используют этот API.
Почему нужно ограничивать доступ к API пользователей?
- Безопасность: Предоставление открытого доступа к информации о пользователях может быть рискованным, особенно если в ней есть конфиденциальные данные.
- Производительность: Ограничение количества запросов к API пользователей может помочь улучшить производительность вашего сайта.
- Защита от нежелательной активности: Отключение или ограничение доступа к API пользователей может помочь предотвратить нежелательную активность, такую как спам-регистрации и перебор учетных данных.