Итак, я пытался внести несколько изменений в пользовательскую тему WordPress, которая вводит полный пересмотр Dashboard. Я постоянно нахожу небольшие проблемы с оригинальной темой, которые мне нужно исправить (неправильная проверка на наличие дублирующих записей при импорте новых, метаданные записей не сохраняются правильно, сообщения не сортируются по соответствующим категориям и т. Д.)
Поскольку я работал с этим, мне нужно было просматривать и изменять базу данных бесчисленное количество раз, чтобы увидеть, что тема делает с базой данных, или исправить то, что она испортила. К сожалению, мне не удалось установить phpMyAdmin, поэтому я вносил изменения, напрямую набирая SQL и вставляя его в тему в соответствующих местах, а затем создавая скрипт die()
, чтобы я мог видеть вывод своего SQL.
Внезапно меня поразило, что я могу найти плагин, который интегрирует функциональность phpMyAdmin в WordPress. Поэтому я установил wp-phpMyAdmin.
Кажется, все идет хорошо, пока я не попытаюсь на самом деле DO что-нибудь. Я могу просматривать таблицы, просматривать строки и смотреть на все. Но когда я пытаюсь отредактировать строку или удалить ее, меня перенаправляют на ошибку 404, в которой говорится, что к какой-либо части phpMyAdmin, к которой я обращался (например, tbl_row_action.php
), не существует. Если я сразу перехожу на эти страницы, не отправляя форму для редактирования или удаления строки, они работают нормально, и я получаю сообщение об ошибке, что мой запрос SQL был пустым.
Кто-нибудь еще испытывал это? Я действительно не могу понять точно, почему или куда он посылает 404. Это абсолютно смешно.
РЕДАКТИРОВАТЬ - Немного больше информации:
Я узнал, что я только получаю ошибку 404, когда phpMyAdmin вызывает sql.php
с набором параметров sql_query
EDIT (снова) - еще одно обновление:
Ошибка 404 появляется только тогда, когда sql_query содержит действительный запрос. Просматривая sql.php
(я не потратил слишком много времени на поиск, заметьте), я замечаю, что он, кажется, анализирует запрос и определяет, SELECT
ing, DROP
ing, DELETE
ing, и т.д., чтобы они могли проверить ваши пользовательские права. Это может быть связано с этим кодом анализа.
Следующие запросы не дали мне 404:
test
SELECT test
SELECT test FROM test
SELECT test FROM post_meta
DELETE
DROP
DROP test
Следующие дали мне 404:
SELECT * FROM test
SELECT * FROM post_meta
DELETE FROM
DELETE FROM test
DELETE FROM post_meta
DROP TABLE
DROP TABLE test
БОЛЬШЕ РЕДАКТИРОВАТЬ -
Итак, в самом верху sql.php я разместил следующую строку кода:
die("Test");
Он не умирает, когда я задаю неправильные запросы, перечисленные выше. Это идет прямо к 404 сообщению. Очевидно, что это связано со скриптом перенаправления WordPress, а не с phpMyAdmin
ЗАКЛЮЧИТЕЛЬНЫЕ РЕДАКТЫ -
Я провел гораздо больше исследований и извлекал выгоду из WordPress.
Я очень подозреваю, что у меня возникла эта проблема из-за новой функции безопасности WordPress. Старые версии WordPress, по-видимому, использовались для ввода SQL в URL, что представляло ОГРОМНУЮ угрозу безопасности. В результате понятно, что они не позволят SQL проходить через URL сейчас. Непосредственно перед шаблоном значение is_404()
устанавливается равным true. Он устанавливается в WP::parse_request()
(который вызывается WP::main()
, который вызывается wp()
, который вызывается в wp-blog-header.php
)
Каждый раз, когда есть подозрительный запрос SQL В ЛЮБОМ МЕСТЕ в запрашиваемом URI, меня выгоняют на страницу 404. Я хотел бы изменить это поведение, делая как можно меньше модификаций ядра WordPress. Мне нужен кто-то, кто действительно хорош с WordPress, чтобы помочь мне здесь. Я предполагаю, что существует ответ с использованием переменной $ wp_rewrite, которая содержит множество правил перезаписи URL.
Проблема окончательно обнаружена -
Для тех, кто заинтересован в том, чтобы найти этот пост, следил за ним или просто сталкивался с подобными проблемами, я, наконец, обнаружил источник 404 ошибок. Это совсем не связано с WordPress. Проблема упала на mod_security, модуль Apache, который предотвращает любые подозрительные запросы (включая запросы с SQL в URI запроса)
Всегда не забывайте правильно устанавливать настройки mod_security.