В статье рассмотрен случай XSS-уязвимости при разработке на Java Script использованием DHTML-компонентов продукта «Форсайт. Аналитическая платформа».
Рассмотрим на примере компонента ListBox. Пусть список его элементов приходит из базы данных веб-приложения.
var data = ["list1", "<b> xss <" + "/b>"];//Предполагаем, что этот список был получен с серверной части веб-приложения
var listBox = new PP.Ui.ListBox({
Items: [
{ Content: data[0] },
{ Content: data[1] }
],
ParentNode: document.body
});
После выполнения примера на странице будет размещен компонент ListBox с элементами list1 и xss, хотя ожидалось: list1, <b> xss </b>.
Важно. Приведен пример безобидной XSS-уязвимости, но вместо тега жирности в текст элемента можно вставить элемент <script>, который перенаправляет страницу на сайт злоумышленника.
Это произошло потому, что в свойство Content всех элементов управления можно записать html строку и готовую domNode.Control.
Исправить можно следующим образом:
var data = ["list1", "<b> xss <" + "/b>"];
var listBox = new PP.Ui.ListBox({
Items: [
{ Content: PP.escapeHTML(data[0]) },
{ Content: PP.escapeHTML(data[1]) }
],
ParentNode: document.body
});
В результате получим элементы list1, <b> xss </b>.
Примечание. Использовать функцию PP.escapeHTML имеет смысл только там, где отображаются данные, которые вносит в базу пользователь или администратор, либо их внесение предполагается сделать в одной из следующих версий продукта.
См. также: