Не требует, не включает, не перезаписывает URL, но скрипт выполняется без ссылки - PullRequest
9 голосов
/ 21 июля 2011

Я пытаюсь отследить поток выполнения в каком-то устаревшем коде. У нас есть отчет, доступ к которому

http://site.com/?nq=showreport&action=view

Это загадка:

  • в index.php нет $_GET['nq'] или $_GET['action'] (и нет $_REQUEST либо),
  • index.php или любые включенные в него источники не включают showreport.php,
  • в .htaccess переопределение URL отсутствует

пока, showreport.php исполняется.

У меня есть доступ к cPanel (но нет файла конфигурации apache) на сервере, и это живой код, с которым я не могу быть свободным.

Что могло бы сделать это? Куда мне смотреть?

Обновление
Забавная вещь - отправил клиенту ссылку на этот вопрос в обновлении статуса, чтобы держать его в курсе; Через несколько минут доступ был отменен, и клиент сообщил мне, что проект отменен. Я полагаю, что позаботился о том, чтобы не оставить никаких следов того места, где код на самом деле ...

Я рад, что это сняли с меня сейчас, но я также жажду узнать, что это было !

Спасибо всем за ваше время и помощь.

Ответы [ 7 ]

6 голосов
/ 21 июля 2011

Существуют «сотни» способов анализа URL - на разных уровнях (система, httpd-сервер, CGI-скрипт).Поэтому невозможно ответить на ваш вопрос конкретно с помощью предоставленной вами информации.

Вы оставляете довольно четкий намек на «устаревший код».Я предполагаю, что вы имеете в виду, что вы не хотите полностью читать код, даже понимать его настолько сильно, чтобы найти фрагмент приложения, в котором выполняется анализ этого параметра.

Однако было бы хорошо, если быВы оставляете некоторые подсказки «насколько унаследован» этот код: возраст, целевая версия PHP и т. д. Это может помочь.

Не всегда $_GET использовался для доступа к этим значениям ( то же верно для $_REQUEST, они двоюродные братья.

Давайте посмотрим в PHP 3 руководство Зеркало :

HTTP_GET_VARS

Ассоциативный массив переменных, переданных в текущий скрипт через метод HTTP GET.

Возможно, сценарий использует этот массив?Это всего лишь предположение, это был правильный метод для доступа к этим параметрам в течение некоторого времени.

В любом случае, это не должно быть тем, что вы ищете.Это часто неправильно понимаемая и неправильно используемая (буквально злоупотребленная) функция, называемая регистр глобалов PHP Manual в PHP.Так что вы можете просто искать $nq.

Кроме того, всегда есть переменные запроса uri и apache / environment / cgi.См. Ссылку на руководство по PHP 3 выше, где перечислены многие из них.Сравните это с текущим руководством, чтобы получить общее представление.

В любом случае вам может потребоваться grep или многофайловый поиск (у Eclipse есть хорошая сборка, если вам нужно проверить устаревший код внутринемного IDE).

Так что в конце дня вы можете просто искать строку вроде nq, 'nq', "nq" или $nq.Затем проверьте, что вызывает этот поиск.Строковый поиск - это хорошая запись в кодовую базу, которую вы вообще не знаете.

1 голос
/ 21 июля 2011

Вы должны попробовать debug_backtrace() (или debug_print_backtrace()). Вывод похож на вывод Exception-stacktrace, поэтому он должен помочь вам выяснить,, что называется, когда и откуда. Если у вас нет возможности запустить приложение в локальной системе разработки, убедитесь, что никто больше не может видеть вывод

1 голос
/ 21 июля 2011

Проверьте ваши конфигурационные файлы (php.ini и .htaccess), у вас может быть установлено auto_prepend_file.

1 голос
/ 21 июля 2011

Я не знаю, как это работает, но я знаю, что Wordpress / Silverstipe использует собственную переписывание URL для анализа URL для поиска записей / тегов / и т.д. Таким образом, разбор URL может быть выполнен в сценарии PHP.

1 голос
/ 21 июля 2011

проверьте ваш crontab, [извините, я не знаю, где вы найдете его в cpanel] - скрипт запускается в определенное время или вы можете видеть, что он определенно срабатывает только при запросе определенной страницы?

-sean

РЕДАКТИРОВАТЬ: Если crontab отсутствует, посмотрите на index.php [и он включает в себя] и найдите код, который либо циклически переходит по параметрам URL, не обращая особого внимания "nq "и все, что может анализировать строку запроса [вероятно, что-то вроде: $ _SERVER ['QUERY_STRING']]

-sean

1 голос
/ 21 июля 2011

Я бы установил xdebug и использовал его функцию trace , чтобы по частям посмотреть, что он делает.

EDIT:

Ладно, просто идея, но ... Может быть, ваше приложение представляет собой какое-то адское приложение, которое мне иногда приходится возиться на работе? Один файл включает в себя другой, он включает в себя другой и снова включает в себя оригинальный файл ... Так что, возможно, ваш индексный файл содержит какой-то файл, который в конечном итоге приводит к включению этого файла?

Другая редакция:

Или, иногда разработчики приложений не знали, что такое переменная $ _GET, и анализировали сами URL-адреса -> включение руководства на основе URL-адресов на основе.

0 голосов
/ 21 июля 2011

Вы уверены, что ищете правильный конфиг или сервер? Если вы перейдете по указанному выше URL-адресу, появится страница с сообщением об ошибке, которая указывает на то, что сервер на самом деле является сервером Microsoft iis, а не сервером Apache.

...