Вопрос или проблема
Я пытаюсь записывать множество действий WP, чтобы создать аудиторский след. Я хотел бы полностью отключить редакторы плагинов и тем, но это не вариант. Эти функции кажутся очень слабыми в плане расширяемости, лучший вариант, который я вижу, это прослушивать валидацию нонса и фильтровать все их. Кто-нибудь знает альтернативный, менее хрупкий способ запуска немного кода каждый раз, когда редактор плагинов или тем сохраняет файл?
Действие ajax, которое выполняется при обновлении темы или плагина, это edit-theme-plugin-file
, поэтому вы должны иметь возможность подключиться к нему, запустив код на хук wp_ajax_edit-theme-plugin-file
.
add_action('wp_ajax_edit-theme-plugin-file', 'log_cowboy_coders', 0);
function log_cowboy_coders() {
$user = get_current_user_id();
if (!empty($__POST['theme'])) {
// Записываем, что кто-то редактирует тему
} else if (!empty($__POST['plugin'])) {
// Записываем, что кто-то редактирует плагин
}
if (!empty($__POST['file'])) {
// Записываем, какой файл они редактируют
}
}
Весь обновленный содержимое этого файла также включено в данные POST ($__POST['newcontent']
), поэтому если вы запустите свою функцию до того, как сработает действие ajax по умолчанию, вы, вероятно, сможете получить оригинальное содержимое и сохранить разницу между двумя.
.
Ответ или решение
Чтобы выполнять действия при использовании редактора плагинов и тем в WordPress, вам нужно привязаться к соответствующей AJAX-действию WordPress. В данном случае, как упомянуто в обсуждении, при обновлении файлов тем или плагинов вызывается действие edit-theme-plugin-file
, и вы можете использовать хук wp_ajax_edit-theme-plugin-file
, чтобы отслеживать изменения. Это обеспечивает вам возможность регистрировать все действия, выполняемые в редакторе, и создавать аудит изменений.
Шаги для реализации логирования действий
-
Создание функции для логирования: Вам нужно определить функцию, которая будет записывать действия пользователя. Внутри этой функции вы сможете идентифицировать, редактируется ли тема или плагин, а также определить изменённый файл.
-
Подключение к AJAX-хуку: Используйте хук
wp_ajax_edit-theme-plugin-file
, чтобы ваша функция выполнялась при каждом сохранении изменений через редактор. -
Получение данных: Ваша функция должна получить и обработать данные, переданные через POST-запрос, чтобы узнать, какой именно файл редактируется и какие изменения были внесены.
Пример реализации
Вот пример кода, который можно использовать для регистрации действий:
add_action('wp_ajax_edit-theme-plugin-file', 'log_cowboy_coders', 0);
function log_cowboy_coders() {
$user = get_current_user_id();
// Проверка, редактируется ли тема
if (!empty($_POST['theme'])) {
error_log("Пользователь с ID $user редактирует тему: " . sanitize_text_field($_POST['theme']));
}
// Проверка, редактируется ли плагин
else if (!empty($_POST['plugin'])) {
error_log("Пользователь с ID $user редактирует плагин: " . sanitize_text_field($_POST['plugin']));
}
// Получение имени редактируемого файла
if (!empty($_POST['file'])) {
$file = sanitize_file_name($_POST['file']);
error_log("Файл, который редактируется: $file");
// Получение нового содержимого файла
$new_content = $_POST['newcontent'] ?? '';
// Логика для сохранения старого содержимого или сравнения с новым содержимым
}
}
Рекомендации
- Фильтрация входящих данных: Используйте функции
sanitize_text_field()
иsanitize_file_name()
, чтобы защитить приложение от атак через вводимые значения. - Логирование: Настройте механизм логирования, используя
error_log()
или настраивая собственную систему логов для более удобного мониторинга. - Пользовательский интерфейс: Если необходимо предоставлять отчёты о изменениях пользователям, можно дополнительно создать интерфейс в админке WordPress, отображающий журнал изменений.
Заключение
Таким образом, используя хук wp_ajax_edit-theme-plugin-file
, вы можете легко регистрировать действия пользователей при редактировании файлов тем и плагинов в WordPress. Этот способ является менее хрупким, чем попытка фильтровать каждый вызов на основе nonce, так как он привязан непосредственно к обработке AJAX-запросов. Регулярное логирование изменений поможет вам создать надежный аудит и мониторинг активности на вашем веб-сайте.