2010-10-14 5 views
2

У моей компании есть партнеры, которые внедряют несколько наших веб-страниц на их сайт с помощью динамически генерируемого iframe. Исходный URL-адрес iframe исходит из строки запроса на сайте партнера, поэтому я хочу убедиться, что нет риска атаки с использованием межсайтового сценария, поскольку мы используем ненадежный вход в качестве источника iframe.Предотвращение атаки XSS при использовании CreateElement Javascript

URL-адрес источника всегда является относительным URL-адресом (наше имя хоста жестко закодировано в Javascript и добавлено к относительному URL-адресу), и мы делаем некоторую проверку на входном URL-адресе, чтобы убедиться, что он начинается с «index.php», поскольку все запросы направляются через эту страницу на нашем сайте. Например, если следующий URL были доступны на сайте клиента:

www.ourpartner.com/home.html?url=index.php%3Fid%3D999 

Источник URL для фрейма будет http://www.oursite.com/index.php?id=999. IFrame генерируется в Javascript с использованием createElement следующим образом:

... 
// We assign the url value from the query string to the variable urlparam 

if(! urlparam.match(/^index\.php/i)) { 
    // Error. Quit. 
} 
var myiframe = document.createElement('iframe'); 
myiframe.src = 'http://www.oursite.com/' + urlparam; 
document.getElementById('iframe_container').appendChild(myiframe); 

Есть ли Чейс злоумышленник может внедрить вредоносный URL в источник фрейма? Браузеры, похоже, избегают любых объектов HTML, которые могут отображаться в URL-адресе, таких как двойные кавычки и скобки влево/вправо. Должны ли мы принимать какие-либо дополнительные меры предосторожности с URL-адресом?

Спасибо!

ответ

3

Нет, это нормально.

Когда вы имеете дело с свойствами DOM, такими как .src, в нем нет разметки. Вы записываете строку непосредственно в свойство string. Вам нужно будет только беспокоиться об экранировании HTML, если вы инкапсулируете значения внутри разметки, например, при записи на innerHTML или document.write().

+0

Я думал, что это так, но хотел убедиться. Спасибо за вашу помощь. –