我公司的合作伙伴通过动态生成的iframe将一些网页嵌入到他们的网站中。 iframe的源URL来自合作伙伴站点上的查询字符串,因此,我想确保没有跨站点脚本攻击的风险,因为我们将不受信任的输入用作iframe的源。
源URL始终是一个相对URL(我们的主机名在Javascript中进行了硬编码,并且前缀在相对URL之前),并且我们对输入URL进行了一些验证,以确保它以“ index.php”开头,因为所有请求都已路由通过我们网站上的该页面。例如,如果在客户端站点上访问了以下URL:
www.ourpartner.com/home.html?url=index.php%3Fid%3D999
iframe的源URL为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);
攻击者是否有机会向iframe的源中注入恶意URL?浏览器似乎会转义可能出现在URL中的所有HTML实体,例如双引号和左/右尖括号。我们是否应该对URL采取进一步的预防措施?
谢谢!
最佳答案
不,这很好。
处理诸如.src
之类的DOM属性时,不涉及任何标记。您正在直接将字符串写入字符串属性。如果要将值封装在标记中,则只需要担心HTML转义,例如,在写入innerHTML
或document.write()
时。
关于javascript - 使用Javascript的CreateElement时防止XSS攻击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3935744/