Использование элемента CDATA в XML уязвимо или нет?
Является ли он уязвимым при использовании элемента CDATA в XML-документах? Если да, то что произойдет, если мы используем элемент CDATA в XML-документах?
3 ответа:
Я не знаю, что вы подразумеваете под "уязвимостью", но есть одна ошибка, которую многие люди делают с разделами CDATA. Это происходит, когда ленивый программист на самом деле не понимает текстового экранирования и пытается избежать обычного процесса
&
-кодирования специальных символов в XML. Они думают, что им сойдет с рук:print "<element><![CDATA["+textstring+"]]></element>";
И хотя это действительно остановит
<
или&
символ вtextstring
, обрабатываемый как разметка, он не является водонепроницаемым, потому что textstring может содержать последовательность]]>
, в результате чего:<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element>
Это XML-инъекция, которая, как и HTML-инъекция, потенциально может иметь XSS-подобный эффект безопасности.
Так что вам все равно придется экранировать некоторые последовательности в CDATA (обычно вы разделяете последовательность
]]>
между двумя секциями CDATA). На практике это делает использование CDATA не проще, чем просто&
-кодирование текстового содержимого обычным способом. Так что на самом деле нет никакой причины когда-либо использовать раздел CDATA.
Раздел CDATA-это просто другой способ представления символьных данных в XML-документе. Это означает точно то же самое, что и любой другой (не тег) текст в документе, за исключением того, что он экранируется по-разному.
Нет никакой дополнительной "уязвимости", связанной с CDATA (за исключением ошибок в вашей библиотеке синтаксического анализа XML, конечно).
Уязвимы для чего? Какой-то инъекционный приступ? CDATA говорит синтаксическому анализатору передавать содержимое без его разбора, поэтому, если вы проверяете свой XML, я полагаю, что раздел CDATA пропускает шаг проверки.
Код, использующий поток XML, должен иметь некоторую бизнес-валидацию выше и за пределами проверки схемы, поэтому вы рискуете только в том случае, если не сможете проверить входные данные перед их использованием.