使用Javascript CreateElement时防止XSS攻击

时间:2010-10-14 17:18:45

标签: javascript xss code-injection

我公司的合作伙伴通过动态生成的iframe将我们的一些网页嵌入到他们的网站中。 iframe的源URL来自合作伙伴网站上的查询字符串,因此我想确保不存在跨站点脚本攻击的风险,因为我们使用不受信任的输入作为iframe的源。

源URL始终是一个相对URL(我们的主机名在Javascript中硬编码并添加到相对URL之前),我们对输入URL进行一些验证,以确保它以“index.php”开头,因为所有请求通过我们网站上的该页面进行路由。例如,如果在客户端站点上访问了以下URL:

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

iframe的源网址为http://www.oursite.com/index.php?id=999。 iframe是使用createElement在Javascript中生成的,如下所示:

...
// 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注入iframe源的问题?浏览器似乎会转义可能出现在URL中的任何HTML实体,例如双引号和左/右尖括号。我们是否应该对URL采取进一步的预防措施?

谢谢!

1 个答案:

答案 0 :(得分:3)

不,这很好。

当您处理像.src这样的DOM属性时,不涉及标记。您正在将字符串直接写入字符串属性。如果您将值封装在标记内,例如在写入innerHTMLdocument.write()时,您只需要担心HTML转义。