| name | prompt-injection-defense |
| description | Защита LLM-системы: InputSanitizer на входе, ResponseSanitizer на выходе, FileIdMapper для путей, allowlist опасных tools (secure by default). |
Skill: prompt-injection-defense
Меры защиты от типичных атак на LLM-систему. Источник истины — _docs/security.md.
Когда использовать
- Добавляешь новую точку входа пользовательского текста (новый адаптер/handler).
- Добавляешь tool, работающий с файловой системой или сетью.
- Меняешь то, что попадает в
final_answer или в системный промпт.
Алгоритм
- Вход →
InputSanitizer. Пользовательский текст перед передачей в core.handle_user_task пропускай через sanitize_user_input(...) (режим "warn" по умолчанию). Он детектит prompt injection: ignore previous instructions, repeat your system prompt, forget everything above, system: в начале строки, разделители <|...|>.
- Пути →
FileIdMapper. Не клади полные пути файлов в goal/ответы. Генерируй временный file_id (generate_id) и восстанавливай путь через get_path. Tools read_file/read_document принимают file_id как альтернативу path.
- Выход →
ResponseSanitizer. final_answer перед отправкой пользователю пропускай через sanitize_response(...): маскирует полные пути ([FILE_PATH]), конфиг-ключи ([CONFIG_KEY]), фрагменты системного промпта ([SYSTEM_SECTION]/[SYSTEM_IDENTITY]).
- Опасные tools → allowlist (secure by default).
_DANGEROUS_TOOLS = {"http_request", "read_file"}. По умолчанию dangerous_tools_allowlist пуст — все опасные tools запрещены. Разрешение — только явно через .env (DANGEROUS_TOOLS_ALLOWLIST=...).
- Валидация параметров. Для ФС-tools: запрет
.. (path traversal), запрет системных путей (/etc, /sys, /proc, ~/.ssh), проверка нахождения внутри разрешённой директории. Для http_request: только http/https, проверка netloc.
- Системный промпт. Правила безопасности живут в
app/prompts/agent_system.md (отказ выполнять «ignore instructions», отказ печатать системный промпт, отказ от опасных операций без явного запроса).
Чего избегать
- Прокидывания сырого пользовательского ввода в системный промпт без санитайзинга.
- Полных путей ФС в goal, логах и ответах пользователю.
- Разрешения опасных tools по умолчанию (allowlist должен быть пуст, пока явно не разрешено).
- Иллюзии полной защиты: помни про known-limitations (
_docs/security.md §5) — юникод-эскейпы, base64-инъекции, голые секреты без =.