cloud-castle/parser-xml

Безопасный разбор и построение XML для PHP 8.1+ с защитой от XXE (отклонение DOCTYPE), fail-loud и двунаправленным маппингом XML↔массив. Единственная зависимость — ext-dom.

Maintainers

Package info

gitverse.ru/cloud-castle/parser-xml

Homepage

Issues

Documentation

pkg:composer/cloud-castle/parser-xml

Transparency log

Statistics

Installs: 11

Dependents: 1

Suggesters: 0

v1.0.0 2026-07-19 20:46 UTC

This package is not auto-updated.

Last update: 2026-07-20 07:22:25 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Parser Xml

CloudCastle Parser Xml

Packagist Version Downloads PHP Version License

Безопасный разбор и построение XML для PHP 8.1+ с защитой от XXE: документы с DOCTYPE/DTD отклоняются (закрывает XXE и «billion laughs»), внешние сущности не загружаются. Всегда бросает исключение при ошибке, не раскрывая исходных данных. Двунаправленный маппинг XML ↔ массив. Единственная зависимость — ext-dom.

Установка

composer require cloud-castle/parser-xml

Требуется PHP 8.1+ и расширения ext-dom/ext-libxml.

Быстрый старт

<?php

use CloudCastle\Parser\Xml\Xml;

// Разбор XML в массив (XXE-безопасно: DOCTYPE отклоняется).
$data = Xml::toArray('<user id="1"><name>Alex</name></user>');
// ['user' => ['@attributes' => ['id' => '1'], 'name' => 'Alex']]

// Построение XML из массива.
$xml = Xml::fromArray(['name' => 'Alex', 'roles' => ['role' => ['admin', 'user']]], 'user');
// <?xml ...?><user><name>Alex</name><roles><role>admin</role><role>user</role></roles></user>

// Проверка без исключения (в т.ч. отклонение небезопасного DOCTYPE).
if (Xml::isValid($input)) {
    // ...
}

Возможности

  • Защита от XXE: документы с DOCTYPE/DTD отклоняются (MalformedXmlException), внешние сущности не загружаются, сеть отключена (LIBXML_NONET).
  • Fail-loud: любая ошибка разбора или построения — исключение, а не тихий false/null.
  • Двунаправленность: toArray() (XML → массив) и fromArray() (массив → XML) с симметричным маппингом — атрибуты в @attributes, смешанный текст в @value, повторяющиеся элементы в список.
  • Исключения не содержат исходных данных — только причину сбоя, чтобы персональные и финансовые данные из XML не утекли в логи и трассировки.
  • Валидация имён элементов и атрибутов при построении (нет инъекции в теги).
  • Единственная зависимость — расширение ext-dom.

Сравнение с аналогами

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.1.34, без Xdebug.

1. Функциональность

Возможность🏆 CloudCastlesymfonysabresimplexml¹dom¹
Отклонение DOCTYPE/DTD (защита от XXE)
Fail-loud: исключение при ошибке разбора
Двунаправленность (toArray и fromArray)
Исключения не содержат исходных данных (безопасно для логов с ПД)
Минимум зависимостей (только ext-dom)
Всего🏆 53212

2. Безопасность и корректность

Свойство🏆 CloudCastlesymfonysabresimplexml¹dom¹
Отклонение DOCTYPE/DTD (XXE и «billion laughs»)
Внешние сущности не загружаются
Fail-loud: исключение вместо тихого null/false
Исключения не раскрывают исходные данные (нет утечки ПД)
Валидация имён при построении (нет инъекции в теги)
Всего🏆 53312

3. Производительность

разбор XML-документа в структуру, 40 000 раз (минимум из 4).

РешениеВремя (мс)Итог
simplexml¹347,6базовый уровень (не библиотека)
dom¹476,3базовый уровень (не библиотека)
🏆 CloudCastle674,6быстрейшее среди библиотек
sabre757,4аналог
symfony1 034,1аналог

4. Потребление памяти

Пик памяти на 40 000 операций (изолированный процесс, только целевая библиотека).

РешениеПиковая память (KB)Итог
🏆 CloudCastle7 010легчайшее среди библиотек
symfony7 010аналог
sabre7 010аналог
simplexml¹7 010базовый уровень (не библиотека)
dom¹7 010базовый уровень (не библиотека)

¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.

Вывод: CloudCastle Parser Xml — самый безопасный среди рассмотренных XML-инструментов (единственный отклоняет DOCTYPE/DTD «из коробки», закрывая XXE) и при этом самый быстрый среди библиотек (быстрее symfony/serializer и sabre/xml; нативные simplexml/DOMDocument взяты за базовый уровень — они быстрее, но не дают XXE-защиты, исключений и двунаправленного маппинга). Рекомендуется везде, где XML приходит из недоверенного источника (SOAP, RSS, загрузки, интеграции) и важна защита от XXE без риска утечки данных в логи.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano