Я не знаю, что вы подразумеваете под «уязвимостью», но есть одна ошибка, которую многие люди делают с разделами 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.