Использование элемента CDATA в XML уязвимо или нет? - PullRequest
6 голосов
/ 13 ноября 2009

Является ли уязвимым использование элемента CDATA в документах XML? Если так, что произойдет, если мы используем элемент CDATA в документах XML?

Ответы [ 3 ]

9 голосов
/ 13 ноября 2009

Я не знаю, что вы подразумеваете под «уязвимостью», но есть одна ошибка, которую многие люди делают с разделами CDATA. Это происходит, когда ленивый программист не совсем понимает экранирование текста и пытается избежать обычного процесса & -кодирования специальных символов в XML. Они думают, что могут сойти с рук:

print "<element><![CDATA["+textstring+"]]></element>";

, и хотя это действительно остановит символ < или & в textstring, который рассматривается как разметка, он не является водонепроницаемым, поскольку текстовая строка может содержать последовательность ]]>, в результате чего:

<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element>

Это XML-инъекция, которая, подобно HTML-инъекции, потенциально может оказать влияние на безопасность, подобную XSS.

Таким образом, вам все равно нужно экранировать некоторые последовательности в CDATA (обычно вы разделяете последовательность ]]> между двумя секциями CDATA). На практике это делает использование CDATA не проще, чем просто & - обычное кодирование текстового содержимого. Так что на самом деле нет никаких причин использовать раздел CDATA.

2 голосов
/ 13 ноября 2009

Раздел CDATA - это просто еще один способ представления символьных данных в документе XML. Это означает то же самое, что и любой другой (не теговый) текст в документе, за исключением того, что он экранирован по-другому.

Нет дополнительной "уязвимости", связанной с CDATA (за исключением ошибок в вашей библиотеке синтаксического анализа XML, конечно).

0 голосов
/ 13 ноября 2009

Уязвим к чему? Инъекционная атака какой-то? CDATA указывает анализатору пропустить содержимое, не анализируя его, поэтому, если вы проверяете ваш XML, я полагаю, что раздел CDATA пропускает этап проверки.

Код, использующий поток XML, должен иметь некоторую деловую проверку, выходящую за рамки проверки схемы, поэтому вы рискуете только в том случае, если не сможете проверить входные данные перед их использованием.

...