Page 200 - 《软件学报》2021年第8期
P. 200
2482 Journal of Software 软件学报 Vol.32, No.8, August 2021
攻击者可以实现用户追踪或个性化的社会工程.更进一步地,Staicu 等人 [79] 发现:同源策略规则中,允许嵌入的跨
源图片也能被用来造成类似的隐私泄漏.
为了更直观地描述 CSRF 与 XSSI 攻击,我们总结了两种攻击所利用的同源策略规则、后果以及相关工作
(见表 4).
Table 4 Attacks on accessing cross-origin resources (attacker and victim site are cross-origin)
表 4 获取跨源资源的攻击方式(攻击者网站与受害者网站不同源)
攻击 利用的同源策略规则 后果 相关工作
preAuth-CSRF 用户以攻击者账号浏览受害者网站, Barth
(login CSRF) 允许发送跨源网络请求 攻击者能事后获取用户浏览历史等信息 等人 [11]
CSRF 攻击者以用户身份来修改 Sudhodanan
Auth-CSRF 允许发送跨源网络请求 [74]
受害者网站服务器(如转账) 等人
允许发送跨源网络请求; 攻击者以用户身份来读取用户在 Lekies
XSSI [12]
允许嵌入跨源脚本(或图片) 受害者网站服务器数据(如联系人) 等人
注:CSRF 与 XSSI 分别为跨站请求伪造(cross-site request forgery)与跨站脚本注入(cross-site script inclusion)攻击的简称.
preAuth-CSRF,Auth-CSRF 与 XSSI 攻击的建立来自于两个不同的角度.
• 攻击时机:不同于 Auth-CSRF 与 XSSI 攻击,preAuth-CSRF 攻击发生在用户登录账号之前.不同的攻击
时机使得攻击者采用不同的攻击方式,并且攻击获利方式也存在不同,如 preAuth-CSRF 需要攻击者事
后登录自己账号来获取隐私数据.
• 攻击后果:攻击者网页利用 CSRF 攻击获取到的对不同源资源的访问权限是有限的.通常而言,CSRF 只
允许攻击者获取用户历史行为或者修改受害者网站的状态,并不能允许攻击者直接读取用户的数据
(如邮件网站中用户的联系人等信息).其本质原因在于:同源策略规则允许一个 frame 向任意源网站发
送请求,但不允许获取跨源网站返回的网络响应.XSSI 更进一步地考虑到同源策略规则允许 frame 内
嵌任意源的脚本,利用这一规则,将使得攻击者能够发起攻击来直接读取隐私数据.
3.3.2 防御方案
CSRF 与 XSSI 攻击得以发生的原因有两点:一是同源策略规则允许发送跨源网络请求与嵌入跨源脚本,二
是浏览器 cookie 机制使得攻击者 frame 可以通过受害者网站服务器的用户认证.应对 CSRF 与 XSSI 攻击,可以
从这两个方面着手.
• 首先,同源策略规则的增强可以应对 CSRF 与 XSSI 攻击.Barth 等人 [11] 指出,浏览器为同源策略安全增
加一个新的 HTTP 头:Referer.当一个 frame 发起网络请求时,浏览器将获取该 frame 的 URL,并将该 URL
作为 Referer 的值携带到网络请求中.尽管浏览器并未限制跨源网络请求,但是 Web 服务器可以根据
Referer 来进行同源检测,或着判断跨源网络请求是否来自于其信任的跨源网页.当发送的 frame 不被
认可时,Web 服务器将拒绝返回 XSSI 攻击所需的 JSON 与 JavaScript 文件,或者拒绝执行 CSRF 攻击
中所要求的操作(如转账).尽管 Referer 对同源策略进行了加强,但是却被认为是导致信息泄漏的另一
种方式 [80,81] ,其原因在于:一个网站可以通过 Referer 来判断用户通过其他哪些网站对其进行了访问,这
将有助于建立网站排行与追踪用户行为,但破坏了用户隐私.
• 其次,对浏览器 cookie 机制的增强可以应对 CSRF 与 XSSI 攻击.Barth 等人 [11] 认为,可以通过安全令牌
与 cookie 机制协作的方式来应对这些攻击.具体来说,一个 Web 应用可以在其所有 frame 的 URL 链接
中加入安全令牌.当确保安全令牌很难被攻击者 frame 所获取时,Web 应用服务器可以通过安全令牌进
行 cookie 验证后的第二次认证,用来判断网络请求是否来自于所允许的 frame.Web 应用同样可以在
frame 中使用 XMLHttpRequestAPI 来发送请求,并且同时携带上自定义的 HTTP 头与相应的值.当该自
定义的 HTTP 头与值不能被攻击者 frame 所获取时,Web 应用服务器将同样能够区分发送网络请求的
frame 是否应该被授权.Franken 等人 [82,83] 发现,目前的浏览器与浏览器扩展中实现了“阻止第三方
cookie”的功能.第三方 cookie 是指 frame 在网络请求中携带的跨源的 cookie,如 CSRF 与 XSSI 攻击中,