AI генерирует имя скачиваемого файла: как безопасно задать заголовок

Не собирайте HTTP-заголовок скачивания конкатенацией недоверенного имени. Название, предложенное моделью или взятое из документа, должно пройти отдельный контракт, а не становиться произвольным фрагментом ответа сервера.

Пример из разработки

Помощник создаёт отчёт и предлагает понятное имя файла на основе темы запроса. В теме оказываются кавычки, перенос строки или фрагмент пути. Код напрямую вставляет значение в Content-Disposition. В зависимости от стека это приведёт к отказу, повреждённому имени или опасной интерпретации заголовка. Доверие к генерации не заменяет проверку транспортного формата: модель может просто точно повторить недоверенный пользовательский текст.

Почему это работает

Используйте поддерживаемый API фреймворка для скачивания и корректное кодирование параметров имени. Явно отклоняйте недопустимые управляющие символы и задавайте подходящее расширение по реально созданному формату, а не по произвольной рекомендации модели. Для международных имён учитывайте filename и filename* согласно поддержке клиентов. Имя скачивания не должно определять внутренний путь хранения; у объекта может быть независимый серверный идентификатор. Не удаляйте символы молча, если изменение делает названия неоднозначными.

Проверка перед использованием

ПроверкаОжидаемое поведение
Обычное русское имя с пробеламиКлиент получает ожидаемое имя и правильный тип файла без повреждения кодировки или структуры заголовков.
Имя содержит кавычку или перевод строкиСервер применяет явную безопасную политику; значение не создаёт дополнительный заголовок и не попадает в ответ необработанным.
В имени указано чужое расширение или путьРезультат сохраняет корректный формат и безопасное имя; путь хранения не выбирается на основании этой строки.

RFC 6266 описывает передачу имени, но не делает содержимое файла безопасным. Проверки формата, прав на скачивание и самого документа остаются отдельными. Поведение конкретного браузера и фреймворка проверяйте на готовом ответе сервера.

LLM-продукт нужно проверять на границах вывода: сгенерированная строка становится данными для браузера, файловой системы и других исполнителей. В платном курсе LLM Security PRO: Prompt Injection, утечки, tool-abuse можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.

Документация для проверки технических деталей: RFC 6266: Content-Disposition.

Следующий шаг: Безопасность LLM-приложений: практические проверки. По смежным вопросам: Картинки в Markdown-ответе AI: как они могут утекать данные, Память AI-агента: как не сохранить чужую команду навсегда.