当前位置:  开发笔记 > 编程语言 > 正文

什么是跨站点脚本包含(XSSI)?

如何解决《什么是跨站点脚本包含(XSSI)?》经验,为你挑选了3个好方法。

我最近在多个页面上看过XSSI,例如Web Application Exploits and Defenses:

浏览器会阻止一个域的页面读取其他域中的页面.但是它们不会阻止域的页面引用其他域中的资源.特别是,它们允许从其他域渲染图像,并从其他域执行脚本.包含的脚本没有自己的安全上下文.它在包含它的页面的安全上下文中运行.例如,如果www.evil.example.com包含托管在www.google.com上的脚本,则该脚本将在恶意上下文中运行,而不是在Google上下文中运行.因此该脚本中的任何用户数据都将"泄漏".

我没有看到这在实践中产生了什么样的安全问题.我理解XSS和XSRF,但XSSI对我来说有点神秘.

任何人都可以根据XSSI绘制漏洞吗?

谢谢



1> Erlend..:

如果您使用JSONP传输数据,这通常是一个问题.考虑一个由域A组成的网站,该域A从域B加载数据.用户必须通过站点A和B进行身份验证,并且因为同源策略阻止旧版浏览器直接与不同的域(B)进行通信而不是当前页面(一),开发人员决定使用JSONP.因此,站点A包含一个指向http://B/userdata.js的脚本,类似于:

displayMySecretData({"secret":"this is very secret", ...})

因此,A定义了一个名为displayMySecretData的函数,当服务器B中包含的脚本运行时,它会调用该函数并将秘密数据显示给用户.

现在邪恶的服务器E出现了.它看到A使用JSONP包含来自B的数据.因此,服务器E包含相同的脚本,但定义了自己的displayMySecretData,而不是窃取数据.然后攻击者欺骗用户访问他的网站.当用户去那里并且他登录到B时,浏览器会自动发送B的身份验证cookie以及从B中获取脚本的请求.B看到经过身份验证的用户,从而按预期返回脚本.E获取数据,并预先...

因此,使用JSONP以不同的方式加载来自不同域的机密数据是非常不安全的,但人们仍在使用它.馊主意.



2> Vroo..:

XSSI不仅限于jsonp响应.在某些浏览器中,您可以覆盖Array构造函数.如果Json响应包含[...]并且您将其包含为脚本,则它将执行新构造函数而不是内置构造函数.修复是在响应中插入一些无法解析的内容])}while(1);,然后在解析之前使用代码将其删除.攻击者不能这样做,因为脚本包含始终是整个脚本.

http://google-gruyere.appspot.com/part3#3__cross_site_script_inclusion上有关此问题及此解决方案的更多详细信息



3> Cheekysoft..:

XSSI是一种奇特的说法:你在你的程序中包含了别人的代码; 你不必对什么是在代码的任何控制,而你没有超过其所托管的服务器的安全性有任何控制.

例如,假设我包含在我的html页面中


该脚本将在我的webapp中运行,其信任级别与我自己的任何javascript代码相同.它可以访问整页内容和DOM,它将能够读取我所有应用程序的cookie并读取用户的按键和鼠标移动,以及javascript可以执行的所有其他操作.

如果我的伙伴dave,然后决定在他的酷小部件(例如,将所有用户的cookie,表单数据和按键发送到他的服务器的嗅探器/键盘记录器)中放入恶意内容,那么我不一定知道.此外,我的应用程序的安全性现在取决于戴夫服务器的安全性.如果dave的服务器遭到入侵并且coolwidget.js被攻击者替换,我再也不会知道并且恶意代码将作为我的应用程序的一部分运行.


这是事实,但并不是人们说XSSI时的意思.在XSSI中,包含脚本*的*页面是恶意的,脚本本身就是受害者.Erlend的答案是准确的(就目前而言;它只涵盖了利用包含机密信息的JavaScript文件的方法之一).
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有