Захист від XSS з JavaScript

17:25 29.12.2012

Продовжуючи тему технологій захисту від XSS атак, після статті про HttpOnly, розповім про іншу технологію захисту від XSS атак. Яку я розробив ще у лютому 2008 року. Цей метод використовує JavaScript для того щоб протидіяти XSS атакам.

Суть методу полягає в перевизначенні деяких методів DOM. Зокрема методу cookie класу document. Для цього потрібно вказати наступний JavaScript код:

HTMLDocument.prototype.__defineGetter__("cookie",function(){return null;});

Подібно до раніше описаного методу захисту з використанням HttpOnly, це вбереже від класичних атак на викрадення кукіса. Але це не вбереже від інших атак через XSS уразливості. Бо XSS атаки не обмежуються лише викраденням кукісів, про що я наголошував неодноразово.

Даний метод я побачив в IPB на початку 2008 року, коли досліджував виявлену мною Persistent XSS в IPB. В 2.х версіях движка цей алгоритм використовувся в якості XSS-фільтру, тому в браузерах Mozilla і Firefox не можна було дістатися кукісів.

Порівняно з HttpOnly, даний метод має ряд переваг:

1. На відміну від HttpOnly, цей метод підтримують не тільки нові браузери, але й старі. Якщо для Firefox підтримка того методу наявна лише з Mozilla Firefox 3.0.6, то підтримка цього методу є в усіх версіях Firefox, а також в старих версіях Mozilla і в усіх версіях Seamonkey (на яку було перейменовано програмний пакет Mozilla). Підтримуються усі браузери на движку Gecko та Opera (перевірялося в 10.62, можливо попередні версії також підтримуються).

2. Легкість впровадження. Для підтримки не потрібно додавати HttpOnly властивість до кукісів, достатньо розмістити необхідний JS код. Який може бути розміщений в js-файлі, що включений в усі сторінки сайта.

3. Окрім захисту від викраденням кукісів, цей метод можна розширити для захисту від інших видів XSS атак.

Наприклад, можна заборонити використання document.write, що унеможливіть створення іфреймів чи іншого html-коду для проведення CSRF атак чи розміщення шкідливого коду.

HTMLDocument.prototype.__defineGetter__("write",function(){return null});

Недолік лише один - підтримуються не всі браузери. Лише Mozilla Firefox (та інші браузери на движку Gecko) та Opera.

Так що цей метод може бути корисним. Як я вже казав, жодна з цих допоміжних технологій не може дати 100% гарантію захисту від XSS атак і вирішує лише частину проблеми, тільки виявлення та виправлення всіх XSS уразливостей дасть надійних захист. Але ці технології можна використати в парі з проведенням аудиту безпеки своїх сайтів, як додатковий елемент безпеки.


Одна відповідь на “Захист від XSS з JavaScript”

  1. MustLive каже:

    You can read this article on English in The Web Security Mailing List: Methods of protection against XSS.

Leave a Reply

You must be logged in to post a comment.