Импорт XML: какие обращения нельзя разрешать парсеру
Безопасный импорт XML должен обрабатывать согласованный формат, не получая лишних прав читать внешние ресурсы. Если обмен не требует DTD, отключите их обработку средствами выбранного парсера. Отдельно проверьте загрузку схем, преобразования и лимиты: успешный разбор синтаксиса ещё не разрешает документу обращаться к файлам или сети.
Начните с документа обмена, а не с настройки сервера
Попросите владельца интеграции описать, что приходит в файле: какие сущности бизнеса, обязательные поля и правила совместимости. Фраза «поставщик присылает XML» не объясняет, нужны ли внешние определения. Разрешение возможностей по привычке делает границы обмена неопределёнными.
Полезно разделить два решения: какие данные клиент вправе передать и какие действия библиотека может совершить при их чтении. Даже договорённый поставщик способен отправить ошибочный файл. Его название в списке партнёров не заменяет настроек обработчика.
В описании XXE для Android риск связан с обработкой недоверенного XML и внешних сущностей при слабой конфигурации. Возможные последствия включают доступ к файловым данным и расход ресурсов. Это основание проверить настройки, а не утверждать, что каждый XML-файл опасен.
Составьте паспорт разрешённых возможностей
Предлагаемая таблица — рабочий документ для условной интеграции каталога товаров. Она не описывает настройки какого-либо действующего сервиса. В столбце с решением должны появиться ответы именно вашей команды, подтверждённые контрактом обмена.
| Возможность | Вопрос владельцу обмена | Предлагаемая граница | Подтверждение для приёмки |
|---|---|---|---|
| DTD | Есть ли обязательная зависимость от них? | Без потребности не обрабатывать | Выбранный парсер применил документированный запрет |
| Внешние сущности | Зачем данные должны находиться вне файла? | Не разрешать произвольное разрешение | Конфигурация и поведение согласованы с контрактом |
| Схема валидации | Кто утверждает версию схемы? | Управляемый набор из поставки приложения | Известны версия и владелец схемы |
| XInclude | Требуется ли включение другого документа? | Не включать без отдельного требования | Нет незапланированного этапа загрузки |
| Преобразование | Кто выбирает правила обработки? | Правила контролирует приложение | Источник правил не определяется произвольно входным файлом |
| Расход ресурсов | Каков штатный объём задачи? | Согласованный бюджет обработки | Отказ не оставляет импорт принятым частично |
Отключение DTD: проверьте конкретную библиотеку
В руководстве OWASP по XXE рекомендуется по возможности отключать DTD. Если они действительно необходимы, отдельно ограничивают разрешение внешних сущностей, загрузку внешних определений и развёртывание сущностей. Способы управления и исходное поведение различаются между парсерами.
Поэтому задание «поставить защитный флаг» недостаточно. Запишите язык, название библиотеки, её версию и фактический способ создания обработчика. Затем сверьте настройки с документацией этого интерфейса. Не переносите пример для одного движка на другой без проверки.
OWASP также рассматривает внешние ресурсы при валидации схем и преобразованиях, отдельно упоминает XInclude. Неподдерживаемая защитная настройка должна считаться ошибкой конфигурации, а не поводом продолжить обработку с неполной защитой. Это стоит включить в критерии запуска импорта.
Проследите весь путь файла
Нарисуйте последовательность: приём файла, разбор, проверка структуры, преобразование, подготовка записей и сохранение. Напротив каждого этапа укажите библиотеку и ответственного. Так легче увидеть второй обработчик, который не получает настройки первого.
Предположим, в учебной интеграции схема хранится в поставке приложения. Команда утверждает её вместе с релизом. Тогда в паспорте обмена логично закрепить именно этот источник и процедуру обновления, а не позволять каждому загруженному документу самостоятельно выбирать новые правила.
Если поставщик требует другой порядок, сначала согласуйте, чем он вызван. Возможно, нужен отдельный канал поставки схем или поддержка нескольких заранее известных версий. Решение о совместимости должно быть явным: его нельзя незаметно заменить разрешением любого внешнего обращения.
Защита от XXE не задаёт бюджет импорта
OWASP предупреждает, что предотвращение XXE не устраняет все варианты истощения ресурсов XML. Поэтому ограничения объёма и сложности нужно согласовать отдельно. Не объявляйте обработчик защищённым от перегрузки только потому, что внешние сущности отключены.
Мы советуем задавать бюджет по штатной задаче: допустимый размер документа, количество бизнес-записей, время обработки и доступную память исполнителя. Конкретные значения выбирают по измерениям своего обмена. Универсальное число из чужого примера не становится требованием к вашему каталогу.
Также договоритесь о результате превышения. Если импорт предназначен для целого документа, ошибка не должна выглядеть как полное успешное обновление. Сохраните прежнее рабочее состояние или предусмотрите явно описанное продолжение с учётом уже принятых записей.
Что дать пользователю при отказе
Оператору нужна причина, по которой он может действовать: неверная версия формата, недопустимая возможность или превышение согласованного бюджета. Подробности внутреннего устройства обработчика оставьте в защищённой диагностике. Не просите клиента присылать рабочие секреты для воспроизведения.
Удобный отчёт связывает номер импорта, время, версию обработчика и этап отказа. Исходный файл храните только по установленным правилам доступа и срока. Ошибку совместимости можно обсуждать с поставщиком на обезличенном фрагменте структуры и описании ожиданий.
План приёмки без опасных демонстраций
- Утвердите формат, необходимые возможности XML и владельца схемы.
- Зафиксируйте конкретный парсер, версию и документацию защитных настроек.
- Проверьте конфигурацию каждого этапа, включая валидацию и преобразование.
- В изолированной среде примите небольшой штатный документ с вымышленными данными.
- Проверьте понятный отказ для несогласованного формата и ошибки конфигурации.
- На безопасных ограниченных наборах проверьте бюджет и отсутствие частично принятого результата.
- Сохраните критерии повторной проверки после замены библиотеки или изменения обмена.
Не нужно воспроизводить чтение системных файлов или обращения к внутренним сервисам, чтобы сформулировать эти требования. Для приёмки нужны согласованные свойства и наблюдаемые результаты в собственной среде. Обнаруженный непонятный параметр лучше разобрать с разработчиком до включения обмена.
В аудит API передайте паспорт обработчика и границы доверия. При разработке интеграции включите их в требования к обмену. А для доработки существующего импорта отдельно опишите, как сохраняется рабочее состояние при отказе.
Вопросы и ответы
Что такое XXE при импорте XML?
Это риск, связанный с разрешением внешних сущностей при обработке недоверенного XML. Проверять нужно возможности и конфигурацию парсера, а не только расширение файла.
Как защитить XML-парсер от внешних сущностей?
По возможности отключите DTD, а необходимые исключения ограничьте по документации конкретного парсера. Проверьте также этапы валидации и преобразования: они не должны незаметно расширять разрешения.
Достаточно ли защиты от XXE для безопасного XML-импорта?
Нет, она не заменяет ограничения ресурсов и проверку бизнес-данных. Отдельно согласуйте бюджет обработки и результат отказа, чтобы повреждённый импорт не выглядел успешным.
Читайте также
Маленький ZIP занял весь диск: какие лимиты нужны импорту
КомментарииERPNext 16.50: как проверить импорт клиентов с адресами
ОбзорыОбзор Python 3.15: UTF-8 по умолчанию, ленивые импорты и JIT
РазработкаИмпорт товаров в магазин: как обновлять каталог без потерь
РазработкаCSV импортируется со съехавшими столбцами: кавычки, переносы и ведущие нули