'单独的域沙箱'(防止JS cookie劫持)是否仍然适用于子域?

时间:2010-08-10 18:00:46

标签: javascript security cookies

更进一步的细节:

  • 我正在运行一个用户可以自由提交Javascript的网站
  • 其他人会预览此Javascript'live'
  • 我们会采取基本措施来阻止像eval()这样的顽皮分子,但不幸的是,有些人可能会因此而滑倒
  • 该网站是 mysite.com ,我收集从 myotherdomain.com运行脚本将阻止cookie劫持,但是会从 js.mysite运行它们。 com 也可以预防吗? (阅读:cheapskate,在额外的域名上省钱)
  • 最后,将在<iframe> mysite.com 运行到单独的域或子域仍然可以像加载全新网站一样有效吗?

3 个答案:

答案 0 :(得分:0)

同源策略(SOP)适用于子域,端口,协议和域。
如果其中一个属性存在差异,SOP将阻止访问。

只要您不在主页上使用document.domain,子域名就会获得SOP保护。如果您在主页面中使用document.domain,则脚本可以在iframe中执行相同操作并绕过SOP。

现在,如果您想在iframe之间启用一些安全通信,那么如果您定位现代浏览器和移动设备,则可以使用window.postMessage

对于旧浏览器,有一些技巧可以做,例如the window.name trick

这不会阻止跨站点脚本(使用来自iframe的当前有效Cookie对您的域进行POST)。您需要使用一个秘密令牌,只有主页中的javascript知道并且将为每个请求发送。

答案 1 :(得分:0)

最好的方法是在适当的沙箱中运行它,而不是去除一些代码。我认为您可以执行delete eval;eval = null;之类的操作。您可以通过delete documentdocument=nulldelete document.cookie获得额外的运气。当然,在各种浏览器上进行测试。

编辑:还可以考虑使用“httponly”Cookie,它(在许多浏览器上)阻止在JavaScript中访问它们。它最初是IE扩展,但已被并入大多数主流浏览器IIRC。

答案 2 :(得分:-1)

是的,子域名是相同的,但域cookie的cookie除外。