Как работает admin-ajax.php?
У нас возникли некоторые разногласия с внешним разработчиком.
Мы хотим ограничить доступ к сайту wp-admin
только для внутреннего доступа (через VPN). Это нужно для защиты от атак внешних пользователей. Мы можем перечислить администраторов сайта и не хотим, чтобы они стали жертвами фишинга.
Наш разработчик утверждает, что мы не можем этого сделать, потому что сайту необходим внешний доступ к административной странице для корректной работы, в частности к странице admin-ajax
.
Что делает страница admin-ajax.php
?
Она находится в административном разделе WordPress. Осуществляется ли к ней доступ неаутентифицированными конечными пользователями? Является ли небезопасной практикой делать её доступной для внешних пользователей?

admin-ajax.php
является частью WordPress AJAX API, и да, он обрабатывает запросы как с бэкенда, так и с фронтенда. Не стоит беспокоиться о том, что он находится в директории wp-admin
. Я тоже считаю это странным местом для него, но само по себе это не является проблемой безопасности. Как это связано с "перечислением администраторов", я не знаю.

рекомендуете ли вы сделать страницу wp admin недоступной извне? и знаете ли вы, может ли это нарушить работу ajax админки?

Я не совсем уверен, что это означает, но если вам нужно, чтобы доступ к файлам в wp-admin
был только с IP вашего VPN, то да, это может нарушить работу AJAX. AJAX-запросы идут из браузера пользователя, поэтому используют IP пользователя.

Для неаутентифицированных и ненадежных пользователей следует сделать два конкретных исключения в ваших VPN / Firewall / Apache .htaccess
, а именно:
example.com/wp-admin/admin-post.php
example.com/wp-admin/admin-ajax.php
Это два автоматических конечных пункта, которые активно используются как самой WordPress, так и различными плагинами.
Вот объяснение того, что делает admin-post.php
:
admin-ajax.php
работает очень похожим образом, и полезное объяснение можно найти здесь.

Если вы хотите ограничить доступ к бэкенду WordPress (например, к wp-admin
), просто используйте правило .htaccess
в директории wp-admin
.
Ознакомьтесь с этой статьёй для общего обзора: Защита директории паролем с помощью .htaccess
Также изучите эту тему для вашего конкретного случая: Защита паролем /wp-admin/

Или, если вы предпочитаете сделать это по IP: http://betterwp.net/wordpress-tips/protect-wordpress-wp-admin-folder/
