> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ru/hacking-tools/web/php-security-scanner.md).

# Сканер безопасности PHP

PHP Security Scanner — это статический инструмент проверки только для подписчиков, предназначенный для поиска опасных функций PHP, слабой конфигурации, рискованных путей от источника к приёмнику и признаков повышения привилегий в приложениях PHP.

Используйте поиск функций как основной экран первичной сортировки: ищите по имени функции, категории, влиянию или серьёзности.

## Поиск функций

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Функция / шаблон</th><th>Категория</th><th>Серьёзность</th><th>Влияние</th><th>Проверка сканера</th><th>Исправление</th></tr></thead><tbody><tr><td><code>system()</code></td><td>Выполнение команд</td><td>Критическая</td><td>RCE под веб-пользователем</td><td>Помечайте загрязнённые строки команд, интерполяцию, конкатенацию и аргументы, контролируемые пользователем.</td><td>Используйте нативные API PHP или строго allow-list-ированные команды и аргументы.</td></tr><tr><td><code>exec()</code></td><td>Выполнение команд</td><td>Критическая</td><td>RCE, захват вывода команды</td><td>Проверьте, достигает ли команда входных данных из запроса, cookie, БД, файла или CLI.</td><td>Уберите использование shell или изолируйте фиксированные команды за allow-list-ами.</td></tr><tr><td><code>shell_exec()</code></td><td>Выполнение команд</td><td>Критическая</td><td>RCE с возвращаемым выводом</td><td>Выявляйте динамическую сборку команды и вывод, отображаемый в ответах.</td><td>Замените безопасными вызовами библиотек.</td></tr><tr><td><code>passthru()</code></td><td>Выполнение команд</td><td>Критическая</td><td>RCE с сырым выводом</td><td>Повышайте серьёзность, если функция достижима из веб-маршрутов или обработки файлов.</td><td>Избегайте вызовов shell; проверяйте фиксированные наборы входных данных.</td></tr><tr><td><code>proc_open()</code></td><td>Управление процессами</td><td>Критическая</td><td>RCE, взаимодействие с процессом</td><td>Проверьте команду, описание дескрипторов, окружение и рабочий каталог.</td><td>Используйте ограниченные воркеры и фиксированные шаблоны команд.</td></tr><tr><td><code>popen()</code></td><td>Управление процессами</td><td>Критическая</td><td>RCE через поток процесса</td><td>Помечайте загрязнённые строки команд и чтение из потока.</td><td>По возможности замените на API потоков/файлов PHP.</td></tr><tr><td><code>pcntl_exec()</code></td><td>Управление процессами</td><td>Критическая</td><td>Замена процесса, риск повышения привилегий</td><td>Повышайте серьёзность в контекстах CLI, cron, SUID, sudo и worker.</td><td>Уберите пути выполнения интерпретатора с привилегиями.</td></tr><tr><td><code>`backticks`</code></td><td>Выполнение команд</td><td>Критическая</td><td>Скрытое выполнение shell</td><td>Выявляйте интерполяцию переменных внутри выражений с обратными апострофами.</td><td>Замените на явные безопасные API.</td></tr><tr><td><code>eval()</code></td><td>Выполнение кода</td><td>Критическая</td><td>Произвольное выполнение PHP</td><td>Помечайте любое использование; повышайте серьёзность, когда вычисляемая строка динамическая.</td><td>Используйте замыкания, парсеры, фиксированные карты диспетчеризации или безопасные шаблоны.</td></tr><tr><td><code>assert()</code></td><td>Выполнение кода</td><td>Высокая</td><td>Риск выполнения устаревшего кода</td><td>Помечайте строковые проверки assert в старых кодовых базах PHP.</td><td>Используйте только булевы проверки; уберите динамические строки.</td></tr><tr><td><code>create_function()</code></td><td>Выполнение кода</td><td>Высокая</td><td>Устаревший выполняемый код</td><td>Выявляйте старые плагины и код совместимости для PHP 5/7.</td><td>Замените анонимными функциями.</td></tr><tr><td><code>preg_replace()</code> на <code>/e</code></td><td>Выполнение кода</td><td>Высокая</td><td>Устаревшая замена с вычислением</td><td>Помечайте устаревшее вычисление при замене в regex.</td><td>Используйте <code>preg_replace_callback()</code>.</td></tr><tr><td><code>mb_ereg_replace()</code> на <code>e</code></td><td>Выполнение кода</td><td>Высокая</td><td>Риск вычисляемой замены</td><td>Проверьте динамические шаблоны и значения замены.</td><td>Используйте логику без вычисления, безопасную для callback.</td></tr><tr><td><code>include</code></td><td>Подключение файлов</td><td>Критическая</td><td>LFI/RFI к выполнению кода</td><td>Помечайте пути, обёртки и трюки с расширениями, контролируемые пользователем.</td><td>Сопоставляйте пользовательский выбор с фиксированными файлами.</td></tr><tr><td><code>include_once</code></td><td>Подключение файлов</td><td>Критическая</td><td>LFI/RFI к выполнению кода</td><td>Проверьте динамические пути include и побочные эффекты автозагрузки.</td><td>Используйте фиксированные карты include и канонические пути.</td></tr><tr><td><code>require</code></td><td>Подключение файлов</td><td>Критическая</td><td>Выполнение кода приложения</td><td>Повышайте серьёзность, когда путь содержит данные запроса.</td><td>Отклоняйте динамический ввод файловой системы.</td></tr><tr><td><code>require_once</code></td><td>Подключение файлов</td><td>Критическая</td><td>Выполнение кода приложения</td><td>Проверьте загрузчики фреймворка, загрузчики плагинов и пути шаблонов.</td><td>Используйте только allow-list-ированные модули.</td></tr><tr><td><code>file_get_contents()</code></td><td>Чтение файла / сети</td><td>Высокая</td><td>LFI, SSRF, раскрытие секретов</td><td>Помечайте загрязнённые пути, URL и <code>php://input</code> парсинг.</td><td>Канонизируйте пути и блокируйте рискованные схемы.</td></tr><tr><td><code>readfile()</code></td><td>Чтение файла</td><td>Высокая</td><td>Прямое раскрытие файла</td><td>Выявляйте обход пути и публичные обработчики загрузок.</td><td>Обслуживайте файлы по ID из одобренных каталогов.</td></tr><tr><td><code>fopen()</code></td><td>Доступ к файлам / сети</td><td>Высокая</td><td>LFI, SSRF, произвольная запись</td><td>Отслеживайте режим, источник пути и URL-обёртки.</td><td>Проверяйте схему, режим и канонический путь.</td></tr><tr><td><code>file()</code></td><td>Чтение файла</td><td>Высокая</td><td>Показывающее строки раскрытие файла</td><td>Помечайте имена файлов, контролируемые пользователем.</td><td>Используйте фиксированные пути хранения и проверки границ.</td></tr><tr><td><code>SplFileObject</code></td><td>Доступ к файлу</td><td>Высокая</td><td>LFI, обход пути</td><td>Выявляйте динамические аргументы конструктора.</td><td>Применяйте <code>realpath()</code> проверку границ.</td></tr><tr><td><code>file_put_contents()</code></td><td>Запись файла</td><td>Критическая</td><td>Веб-оболочка, перезапись, отравление конфигурации</td><td>Повышайте серьёзность, когда имя файла и содержимое загрязнены или путь является публичным.</td><td>Генерируйте имена файлов и записывайте вне web root.</td></tr><tr><td><code>fwrite()</code></td><td>Запись файла</td><td>Высокая</td><td>Произвольное изменение файла</td><td>Отслеживайте происхождение дескриптора из <code>fopen()</code>.</td><td>Ограничьте каталоги, доступные для записи, и типы файлов.</td></tr><tr><td><code>copy()</code></td><td>Запись / перемещение файла</td><td>Высокая</td><td>Подбрасывание или перезапись файла</td><td>Проверьте загрязнение источника и назначения.</td><td>Используйте фиксированные назначения и имена, устойчивые к коллизиям.</td></tr><tr><td><code>rename()</code></td><td>Перемещение файла</td><td>Высокая</td><td>Обход загрузки, перезапись</td><td>Помечайте пути назначения, контролируемые пользователем.</td><td>Используйте сгенерированные имена хранения.</td></tr><tr><td><code>unlink()</code></td><td>Удаление файла</td><td>Высокая</td><td>Произвольное удаление файла</td><td>Выявляйте загрязнённые пути и обход пути.</td><td>Удаляйте по ID объекта, а не по сырому пути.</td></tr><tr><td><code>chmod()</code></td><td>Права доступа</td><td>Высокая</td><td>Ослабление привилегий</td><td>Помечайте широкие режимы, такие как <code>0777</code> и загрязнённые пути.</td><td>Используйте режимы с минимальными привилегиями и фиксированные пути.</td></tr><tr><td><code>chown()</code> / <code>chgrp()</code></td><td>Владение</td><td>Высокая</td><td>Манипулирование привилегиями</td><td>Проверьте скрипты развёртывания и администрирования.</td><td>Не открывайте изменение владения для ввода из приложения.</td></tr><tr><td><code>mkdir()</code></td><td>Файловая система</td><td>Средняя</td><td>Обход пути, слабые права доступа</td><td>Помечайте динамические пути и разрешающие режимы.</td><td>Нормализуйте пути и задавайте строгие права доступа.</td></tr><tr><td><code>touch()</code></td><td>Файловая система</td><td>Средняя</td><td>Создание файла, злоупотребление временной меткой</td><td>Повышайте серьёзность в cron или в привилегированных каталогах.</td><td>Используйте фиксированные пути и проверки владения.</td></tr><tr><td><code>unserialize()</code></td><td>Десериализация</td><td>Критическая</td><td>Инъекция объектов PHP</td><td>Помечайте любое использование с данными из запроса, cookie, загрузки, БД, кэша или очереди.</td><td>Используйте JSON или ограничьте <code>allowed_classes</code>.</td></tr><tr><td><code>Phar</code> / <code>phar://</code></td><td>Десериализация</td><td>Высокая</td><td>Инъекция объектов, вызванная метаданными</td><td>Помечайте принятые <code>phar://</code> пути и файловые функции, затрагивающие загрузки.</td><td>Блокируйте обёртки и избегайте путей с метаданными, содержащими объекты.</td></tr><tr><td><code>__wakeup()</code></td><td>Магический метод</td><td>Высокая</td><td>Гаджет инъекции объекта</td><td>Проверьте действия с файлами, SQL, командами и сетью.</td><td>Держите магические методы без побочных эффектов.</td></tr><tr><td><code>__destruct()</code></td><td>Магический метод</td><td>Высокая</td><td>Гаджет инъекции объекта</td><td>Повышайте серьёзность, если он удаляет, записывает, подключает или выполняет.</td><td>Избегайте опасных побочных эффектов деструктора.</td></tr><tr><td><code>__toString()</code></td><td>Магический метод</td><td>Средняя</td><td>Неявное выполнение гаджета</td><td>Проверьте пути рендеринга шаблонов и логирования.</td><td>Держите методы преобразования чистыми.</td></tr><tr><td><code>curl_exec()</code></td><td>Сеть / SSRF</td><td>Высокая</td><td>SSRF, доступ к внутренним сервисам</td><td>Отслеживайте URL, редиректы, заголовки, прокси и параметры протокола.</td><td>Разрешайте только allow-list-ированные хосты и блокируйте частные диапазоны.</td></tr><tr><td><code>fsockopen()</code></td><td>Сеть</td><td>Высокая</td><td>Сырой доступ к внутренней сети</td><td>Помечайте динамические значения хоста и порта.</td><td>Ограничьте назначения и исходящий трафик.</td></tr><tr><td><code>pfsockopen()</code></td><td>Сеть</td><td>Высокая</td><td>Постоянный доступ к внутренней сети</td><td>Проверьте долгоживущие сервисные соединения.</td><td>Используйте фиксированные конечные точки.</td></tr><tr><td><code>stream_socket_client()</code></td><td>Сеть</td><td>Высокая</td><td>SSRF и злоупотребление протоколами</td><td>Помечайте динамические схемы, хосты и порты.</td><td>Используйте allow-list-ированные сетевые цели.</td></tr><tr><td><code>SoapClient</code></td><td>Сеть</td><td>Средняя</td><td>Запросы в стиле SSRF</td><td>Проверьте динамические значения WSDL и конечной точки.</td><td>Используйте фиксированные WSDL и блокируйте редиректы.</td></tr><tr><td><code>mysqli_query()</code></td><td>SQL</td><td>Высокая</td><td>SQL-инъекция</td><td>Помечайте склеенный или интерполированный SQL.</td><td>Используйте подготовленные выражения.</td></tr><tr><td><code>mysqli_multi_query()</code></td><td>SQL</td><td>Высокая</td><td>Составная SQL-инъекция</td><td>Повышайте серьёзность для динамических многооператорных запросов.</td><td>Избегайте multi-query API для данных, на которые влияет пользователь.</td></tr><tr><td><code>PDO::query()</code></td><td>SQL</td><td>Высокая</td><td>SQL-инъекция</td><td>Помечайте сырые строки запросов, содержащие переменные.</td><td>Используйте <code>prepare()</code> и привязанными параметрами.</td></tr><tr><td><code>PDO::exec()</code></td><td>SQL</td><td>Высокая</td><td>SQL-инъекция или разрушительный SQL</td><td>Проверьте админские действия и миграции.</td><td>Используйте параметризованные выражения.</td></tr><tr><td><code>call_user_func()</code></td><td>Динамическая диспетчеризация</td><td>Высокая</td><td>Злоупотребление callback</td><td>Помечайте имена callback, загрязнённые пользователем.</td><td>Используйте фиксированные карты диспетчеризации.</td></tr><tr><td><code>call_user_func_array()</code></td><td>Динамическая диспетчеризация</td><td>Высокая</td><td>Злоупотребление callback с динамическими аргументами</td><td>Отслеживайте источники callback и аргументов.</td><td>Используйте явные обработчики и типизированные входные данные.</td></tr><tr><td><code>$fn()</code></td><td>Переменная функция</td><td>Высокая</td><td>Произвольная диспетчеризация функций</td><td>Помечайте имена функций из запроса или данных БД.</td><td>Сопоставляйте имена с фиксированными функциями.</td></tr><tr><td><code>$object->$method()</code></td><td>Динамический метод</td><td>Высокая</td><td>Злоупотребление диспетчеризацией методов</td><td>Помечайте имена методов из ввода.</td><td>Используйте allow-list-ированные карты методов.</td></tr><tr><td><code>ReflectionFunction</code></td><td>Рефлексия</td><td>Средняя</td><td>Динамический вызов</td><td>Проверьте имена, полученные через рефлексию, и вызов.</td><td>Ограничьте рефлексию внутренними инструментами.</td></tr><tr><td><code>register_shutdown_function()</code></td><td>Отложенный callback</td><td>Средняя</td><td>Скрытый путь выполнения</td><td>Помечайте динамические callback и аргументы.</td><td>Используйте явные фиксированные callback.</td></tr><tr><td><code>move_uploaded_file()</code></td><td>Загрузить</td><td>Высокая</td><td>Веб-оболочка, перезапись, обход пути</td><td>Проверьте путь назначения, логику расширений, публичное хранилище и использование исходного имени файла.</td><td>Переименовывайте файлы, разрешайте только allow-list-ированные расширения, храните вне web root.</td></tr><tr><td><code>getimagesize()</code></td><td>Проверка загрузки</td><td>Средняя</td><td>Слабая проверка содержимого</td><td>Помечайте, когда используется как единственная проверка загрузки.</td><td>Сочетайте проверки расширения, MIME, содержимого и управления хранением.</td></tr><tr><td><code>ZipArchive::extractTo()</code></td><td>Извлечение архива</td><td>Высокая</td><td>Zip Slip, произвольная запись</td><td>Проверьте имена записей архива и каталог извлечения.</td><td>Канонизируйте каждый извлечённый путь.</td></tr><tr><td><code>phpinfo()</code></td><td>Раскрытие информации</td><td>Средняя</td><td>Утечка конфигурации, путей, модулей и окружения</td><td>Помечайте, если функция достижима вне локальной разработки.</td><td>Удалите из production.</td></tr><tr><td><code>var_dump()</code> / <code>print_r()</code></td><td>Отладочный вывод</td><td>Низкий</td><td>Утечка данных и секретов</td><td>Повышайте серьёзность, когда используется в ответах или путях исключений.</td><td>Используйте структурированные журналы с редактированием.</td></tr><tr><td><code>debug_backtrace()</code></td><td>Отладочный вывод</td><td>Средняя</td><td>Раскрытие пути и аргументов</td><td>Проверьте обработчики ошибок и маршруты отладки.</td><td>Отключите многословный отладочный вывод в production.</td></tr></tbody></table>

## Поиск конфигурации

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Директива</th><th>Серьёзность</th><th>Риск</th><th>Проверка сканера</th></tr></thead><tbody><tr><td><code>disable_functions</code></td><td>Высокая</td><td>Опасные функции выполнения остаются доступными.</td><td>Сообщайте о отсутствующем или неполном усилении защиты, особенно когда существуют командные приёмники.</td></tr><tr><td><code>open_basedir</code></td><td>Средняя</td><td>PHP может получать доступ к более широким путям файловой системы.</td><td>Помечайте отсутствующие, пустые или слишком широкие значения.</td></tr><tr><td><code>allow_url_fopen</code></td><td>Средняя</td><td>Файловые API могут загружать URL.</td><td>Повышайте серьёзность для URL-ориентированного чтения файлов и функций, склонных к SSRF.</td></tr><tr><td><code>allow_url_include</code></td><td>Критическая</td><td>Динамические include могут загружать удалённые ресурсы.</td><td>Критично, когда включено вместе с динамическими путями include.</td></tr><tr><td><code>display_errors</code></td><td>Средняя</td><td>Стектрейсы, пути и секреты могут утекать.</td><td>Помечайте включённые конфигурации production.</td></tr><tr><td><code>expose_php</code></td><td>Низкий</td><td>Раскрытие версии PHP.</td><td>Рекомендуется отключить в production.</td></tr><tr><td><code>file_uploads</code></td><td>Информация</td><td>Существует поверхность атаки загрузок.</td><td>Сочетайте с проверками пути загрузки, размера, расширения и содержимого.</td></tr><tr><td><code>upload_max_filesize</code></td><td>Средняя</td><td>Слишком большие загрузки и злоупотребление хранилищем.</td><td>Помечайте значения больше, чем требуется приложению.</td></tr><tr><td><code>session.cookie_httponly</code></td><td>Средняя</td><td>Кража session cookie через клиентский скрипт становится проще.</td><td>Рекомендуется включить.</td></tr><tr><td><code>session.cookie_secure</code></td><td>Средняя</td><td>Cookies могут отправляться по HTTP.</td><td>Рекомендуется включить на сайтах HTTPS.</td></tr><tr><td><code>session.cookie_samesite</code></td><td>Низкий</td><td>Риск CSRF может увеличиться.</td><td>Рекомендуется явно <code>Lax</code>  или <code>Strict</code>.</td></tr></tbody></table>

## Входные данные источник-приёмник

| Источник           | Примеры                                                           |
| ------------------ | ----------------------------------------------------------------- |
| Запрос             | `$_GET`, `$_POST`, `$_REQUEST`                                    |
| Cookies / сессии   | `$_COOKIE`, значения сессии                                       |
| Загрузки           | `$_FILES`, исходные имена файлов, временные пути                  |
| Заголовки          | `$_SERVER['HTTP_*']`, `getallheaders()`                           |
| Сырое тело запроса | `php://input`, декодированный JSON/XML                            |
| CLI / воркеры      | `$argv`, `STDIN`, переменные окружения                            |
| Сохранённые данные | Строки базы данных, записи кеша, очереди, сериализованные столбцы |
| Локальные файлы    | Файлы конфигурации, импорты CSV, временные файлы                  |

## Идентификаторы правил

| ID правила         | Серьёзность | Значение                                                                                  |
| ------------------ | ----------- | ----------------------------------------------------------------------------------------- |
| `PHP-CMD-001`      | Критическая | Недоверенный ввод достигает выполнения команды.                                           |
| `PHP-EVAL-001`     | Критическая | Недоверенный ввод достигает оценки PHP-кода.                                              |
| `PHP-INCL-001`     | Критическая | Недоверенный ввод управляет путями include/require.                                       |
| `PHP-DESER-001`    | Критическая | Недоверенный ввод достигает `unserialize()`.                                              |
| `PHP-WRITE-001`    | Критическая | Запись файла, контролируемая пользователем, выполняется в исполняемый или публичный путь. |
| `PHP-UPLOAD-001`   | Высокая     | Проверка или хранение загрузки может позволить загрузку исполняемых файлов.               |
| `PHP-SSRF-001`     | Высокая     | Недоверенный URL достигает HTTP-, stream-, socket- или cURL-уязвимых точек.               |
| `PHP-SQL-001`      | Высокая     | Недоверенный ввод достигает сырого SQL.                                                   |
| `PHP-PATH-001`     | Высокая     | Недоверенный путь достигает логики чтения/записи/удаления/перемещения файлов.             |
| `PHP-CALLBACK-001` | Высокая     | Недоверенное имя функции или метода достигает динамической диспетчеризации.               |
| `PHP-CONFIG-001`   | Высокая     | Опасная конфигурация PHP повышает эксплуатируемость.                                      |
| `PHP-PRIV-001`     | Критическая | Выполнение PHP происходит в контексте SUID, sudo, cron или с повышенными привилегиями.    |

## Быстрая предварительная оценка

| Вопрос                                                                    | Повышение серьёзности                 |
| ------------------------------------------------------------------------- | ------------------------------------- |
| Могут ли данные запроса достигнуть функции?                               | Повысить до High или Critical.        |
| Выполняет ли функция команды, PHP-код, include или десериализацию?        | Critical.                             |
| Затрагивает ли это файлы в web root?                                      | High или Critical.                    |
| Принимает ли это URL, wrapper'ы, хосты или порты?                         | High.                                 |
| Запускается ли это из cron, sudo, SUID, воркеров или хуков развёртывания? | Critical.                             |
| Основана ли проверка на блок-листах, только расширениях или только MIME?  | Повысить на один уровень.             |
| Выбирается ли значение из строгого allow-list?                            | Понизить уверенность или серьёзность. |

## Признаки повышения привилегий

| Признак                                                               | Риск                                                                   |
| --------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| SUID-бинарник PHP                                                     | PHP может выполняться с повышенными привилегиями владельца файла.      |
| Правило sudo разрешает PHP                                            | Пользователь может запускать PHP от имени другого пользователя.        |
| Cron от root запускает записываемый PHP                               | Записываемый скрипт может превратиться в привилегированное выполнение. |
| Записываемый web root                                                 | Ошибка в записи файла или загрузке может привести к выполнению кода.   |
| Секреты, доступные для чтения всем                                    | Учётные данные приложения могут позволить латеральное перемещение.     |
| Скрипты Composer запускаются от имени привилегированного пользователя | Выполнение зависимостей или скриптов может повлиять на развёртывание.  |

## Шаблон отчёта

```json
{
  "id": "PHP-CMD-001",
  "severity": "critical",
  "function": "shell_exec",
  "file": "app/Controllers/ReportController.php",
  "line": 84,
  "source": "$_POST['format']",
  "impact": "Удалённое выполнение команд от имени пользователя веб-сервера",
  "fix": "Замените выполнение команд на нативную PHP-библиотеку или строгий allow-list аргументов."
}
```

## Контрольный список сканера

* Анализируйте `.php`, `.inc`, `.phtml`, `.module`, `.theme`, маршруты фреймворка, контроллеры, задания и CLI-скрипты.
* Отслеживайте ввод из request, cookie, upload, header, raw body, CLI, environment, базы данных, кеша, очереди и файлов.
* Обнаруживайте точки выполнения команд, выполнения кода, include, файловые, сетевые, SQL-, десериализации, загрузки, callback-, debug- и конфигурационные точки.
* Оценивайте находки с учётом достижимости, санитизации, версии PHP, конфигурации, web root, прав и контекста выполнения.
* Экспортируйте имя функции, категорию, серьёзность, источник, sink, файл, строку, влияние, уверенность и исправление.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ru/hacking-tools/web/php-security-scanner.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
