跨frame的脚本和安全问题

仅作一下翻译,原文: About Cross-Frame Scripting and Security
在DHTML中,不同的窗口和框架(frames)中的内容可以通过对象模式用脚本相互交互。但是,由于可以在一个浏览器中通过多个窗口和框架同时显示多个毫不相干的内容,因此制定一定的限制性规则用于确保数据的真实性和保护个人隐私信息就显得很有必要的。
这片文章描述了为什么要添加这些限制性规则,以及这些规则在是如何应用在DHML模型上的。所有这些关于脚本交互的规则在windows, dialog boxes, frameSets, frames和iframes这些对象上都是一律适用的。
对于绝大多数内容而言,只有来至于同一个Web域的内容之间的相互交互操作才是允许的。例如,在www.studyez.com 上的一个页面可以用脚本自由的操作任何在www.studyez.com 这个站点的任何其他页面,但是不能通过脚本去操作在其他Web网站上的页面,即使这个页面通过iframe嵌入在www.studyez.com 的页面中。DHTML对象模型使用document.domain属性来判定这个限制规则:只有在同一个Web域里的页面才能自由交互。判断是否属于同一个Web域,要看域名主机、协议以及端口三者是否一致,只有三者完全相同,才能称之为同一个域。比如http://www.studyez.com/ 的页面与 https://www.studyez.com 的页面之间不能用脚本交互操作(因为协议不同),http://www.studyez.com 的页面与http://community.studyez.com 的页面之间也不能用脚本相互交互(因为域名主机不同),http://www.studyez.com:888/http://www.studyez.com/ 的页面之间一样也不能交互操作(因为端口不同)。
一个页面的脚本许可操作范围可以通过设置这个页面的document.domain属性而扩大到具有相同父域名的所有站点中。例如,在http://www.studyez.com/ 中的一个页面,通过脚本设置document.domain属性(初始默认是 www.studyez.com)为studyez.com,从而使得在http://gongwuyuan.studyez.com , http://community.studyez.com, 以及所有其他studyez.com所属的字域名中的页面都可以与这个页面进行交互操作,只要这些页面也相应的设置document.domain属性为studyez.com即可。由于只有那些来至于同一个父域studyez.com所属的站点的页面才可以设置document.domain=studyez.com,所以这也间接的保证了这些内容都是来自于同一个提供者并且双方都已经明确地作了允许互操作的设置。这个设置限制为父域名必须是有效的二级域名,对于.com, .net, 是如studyez.com,对于国际域名,如.cn,则是studyez.com.cn 或 studyez.cn,而不能是com.cn。
为了确保在windows和frames中可以加载任何网站的内容,所以导航操作是一直允许的,不受前面所述的规则限制。只有读取或者修改内容才是被限制的。如可以设置href属性以导航到新的页面,但是如果加载的页面不在同一个Web域里,则不能读取href属性,因为如果可以读取href属性的话,就可以知道用户正在浏览什么页面,而这是违反用户隐私策略的。对于处于不同Web域情况下,与导航相关属性的操作限制如下:


window.location.href 可以设置用于导航到新的页面,但是不可以读取
window.location除href之外的属性 禁止
document.location.href 可写不可读
document.location除href之外的属性 禁止
iframe.src 可写不可读

当脚本尝试受限的操作时,都会抛出一个"拒绝访问"的错误。
从安全的角度理解跨域脚本操作的限制是非常重要的,因为否则的话,一个恶意站点的页面可以通过嵌入iframe加载别的网站的内容从而通过脚本和DHTML模型为所欲为。

 

### 脚本攻击概述 脚本攻击(Cross-Frame Scripting Attack),也称为点击劫持(Clickjacking)的一种形式,涉及恶意网站通过嵌套框架(iframeframe)来操控受害者访问的目标站点的内容。这种攻击允许攻击者创建一个透明的 iframe 层覆盖在合法网页之上,诱骗用户交互时实际操作的是隐藏于其下的另一个页面[^1]。 #### 攻击原理 攻击的核心在于利用浏览器对于不同源之间文档对象模型 (DOM) 访问权限控制机制中的缺陷或弱点。具体来说: - **同源策略绕过**:尽管现代浏览器遵循严格的同源政策限制来自其他域的 JavaScript 对当前窗口 DOM 的修改能力;然而,在某些情况下,如果目标应用缺乏适当保护措施,则可能被诱导执行不受信任资源加载命令。 - **UI 篡改**:攻击者可以构建看似无害却暗藏玄机的 HTML 页面结构,比如将敏感按钮放置在一个不可见区域内并通过 CSS 设置使其看起来像是正常界面的一部分,一旦用户触发这些元素就会造成非预期后果。 ```html <iframe src="https://target-site.com/vulnerable-page" style="opacity:0;position:absolute;"></iframe> <button onclick="document.querySelector('iframe').contentWindow.someVulnerableFunction()">Click Me</button> ``` 上述代码片段展示了如何设置一个透明的 `iframe` 来捕获用户的点击事件,并将其传递给受控环境内的函数调用[^2]。 ### 防护手段 为了有效抵御此类威胁,开发者应当采取一系列综合性的预防措施: - **Content Security Policy (CSP)**:配置 HTTP 响应头以指定哪些外部资源是可以接受加载的以及是否允许嵌入式框架的存在。特别是 X-Frame-Options frame-ancestors 指令能够强制规定哪个域名下才可以显示自己的内容作为子frame[^3]。 ```http Content-Security-Policy: frame-ancestors 'self'; ``` - **JavaScript API 安全增强**:确保应用程序内部使用的各种库插件都经过严格审查并且启用了必要的沙箱模式或其他安全特性。例如 jQuery 库提供了 `.contents()` 方法用于获取 iframe 中的内容,但在处理之前应该先验证来源合法性。 - **教育与意识提升**:提醒最终用户注意潜在风险并教导他们识别可疑链接及活动迹象。同时鼓励报告任何异常情况以便及时响应支持团队介入调查。 ```javascript if (!window.self === window.top) { // 当前页面不是顶层窗口,可能存在帧攻击的风险 } ``` 此段 JavaScript 可帮助检测当前页面是否处于某个框架之中,如果是的话则提示存在安全隐患的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值