`

chrome中页面有跨域iframe出现Adobe Flash Player安全性设置窗口

阅读更多

http://bbs.9ria.com/viewthread.php?tid=85933&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

 

 

 

 

 

 

 

 

本帖最后由 bcpxqz 于 2011-6-16 17:38 编辑

a.html和b.html不同域,a.html用iframe嵌入b.html,在chrome中有时候会出现Adobe Flash Player安全性设置窗口(图1),在console面板中可以看到,四条"Unsafe JavaScript attempt to access frame with URL"错误,但如果你看图2,就会发现,
  1. "Unsafe JavaScript attempt to 
  2. access frame with URL http://a.com/adtest/39iframe/d1.html from frame 
  3. with URL http://a.com/adtest/39iframe/d1.html. Domains, protocols and 
  4. ports must 
  5. match."
复制代码
是同一页面。我想知道问题出在哪里?在其他ie,firefox,safari,opera里面测试不会出现这个设置窗口,在google code上也有讨论:http://t.cn/aK3flfhttp://t.cn/aK3flV 。


chrome:10.0.648.45
flash player:10,2,154,12

代码如下:
a.htm页面结构
  1. <embed id="test1" name="test1" width="100" height="100" 
  2. type="application/x-shockwave-flash" 
  3. pluginspage="http://www.macromedia.com/go/getflashplayer" 
  4. allowscriptaccess="always" allowfullscreen="true" quality="high" 
  5. menu="false" wmode="transparent" src="blank.swf?num=outer">
  6. <iframe
  7. width="100" scrolling="no" height="100" frameborder="0" 
  8. allowtransparency="true" marginheight="0" marginwidth="0" 
  9. src="http://b.com/b.html" name="iframe1" 
  10. id="iframe1"></iframe>
复制代码
其中blank.swf中
import flash.external.ExternalInterface;
ExternalInterface.call("console.info",str);

Iframe b.html页面结构
  1. <embed id="AC86_5500" name="AC86_5500" width="100" 
  2. height="100" type="application/x-shockwave-flash" 
  3. pluginspage="http://www.macromedia.com/go/getflashplayer"  allowfullscreen="true"
  4. quality="high" menu="false" wmode="transparent" 
  5. src="blank1.swf">
复制代码
其中blank1.swf,没有引入flash.external.ExternalInterface,是个空flash
本帖最后由 ticore 于 2011-6-17 18:59 编辑

http://blog.richmediaplus.com/20 ... omain-inject-issue/


反覆測試之後,將問題簡化如下:

1. a.com 下的 HTML 網頁,包含一個 b.com 來的 iframe 網頁
2. b.com iframe 網頁內使用 javascript touch 一下 window.top.location
3. a.com 在 onload 完成後,動態建立一 Flash 物件
4. Flash 物件內透過 ExternalInterface 呼叫任何 Javascript Function
5. 得到以下錯誤訊息

SecurityError: Error #2060: 執行程序安全性違規:ExternalInterface 呼叫者http://a.com/flash.swf 無法存取 [object]。
at flash.external::ExternalInterface$/_initJS()
at flash.external::ExternalInterface$/call()
at flash_fla::MainTimeline/doCallJs()

已經簡化成這樣,很明顯問題是出在 javascript window.top.location 物件上
想要避免該問題,只要在主頁上一載入立即搶先 touch window.top.location 就好了

在測試過程中,還發現另一個更嚴重的問題
跨域的 iframe 能夠透過原型鍊 prototype 插入任意 function 到 location 物件上
讓 top window 頁面呼叫並傳遞任何物件
不受跨網域安全性的限制

分享到:
评论

相关推荐

    iframe跨域常用问题和iframe页面自适应

    在网页开发中,`iframe`(Inline Frame)是一种非常实用的元素,它可以将一个完整的HTML文档嵌入到当前页面中,常用于实现页面组件化、...在实际应用中,还需要注意安全性、性能优化等问题,以提供更优质的网页服务。

    解决JS跨域访问IFrame的解决方案

    "解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中嵌入的跨域IFrame能够正常通信。下面我们将详细探讨这个问题以及可能的解决方案。 首先,理解同源策略是关键。同源策略是...

    完美解决iframe跨域问题

    3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...

    iframe 跨域访问session

    在Web开发中,`iframe` 是一种非常有用的HTML...总的来说,`iframe`跨域访问`session`是一个复杂的问题,需要综合考虑安全性、兼容性和实用性。通过理解上述技术,开发者可以更好地处理这种场景,提供无缝的用户体验。

    iframe 跨域解决方法

    在Web开发中,`iframe` 是一个非常常用的元素,它允许我们在一个页面中嵌入另一个网页。然而,由于浏览器的同源策略限制,当`iframe`加载的页面与...在实际项目中,务必确保遵循最佳实践,同时注意安全性和性能影响。

    跨域控制iframe高度

    在网页开发中,iframe(内联框架)是一种非常实用的元素,它允许我们在一个页面中嵌入另一个页面的内容。然而,由于浏览器的同源策略限制,不同源的...在实际应用中,应结合项目需求和安全性考虑,选择最合适的方法。

    layer弹窗:top.layer弹窗到父页面跨域解决办法

    这样,我们就可以在确保安全性的前提下,成功地使用layer弹窗从子页面弹出到父页面,而且解决了跨域问题。这个过程的关键在于正确地使用`postMessage`进行通信,并且在父页面正确地接收和处理消息。 至于提供的...

    单点登录跨域iframe互相通信方案.zip

    跨域通信是Web开发中的一个重要挑战,特别是在涉及到iframe时。由于浏览器的同源策略,不同源的网页之间无法直接交换信息,这限制了iframe在不同域之间共享数据的能力。但是,在单点登录场景下,有时我们需要在主...

    海康威视h5player.js 2.0版 跨域隔离

    海康威视h5player.js 2.0版 跨域隔离解决方案 海康威视h5player.js 2.0版为提升解码性能,...海康威视h5player.js 2.0版 跨域隔离解决方案旨在保障安全和性能,避免Spectre攻击,并提供了详细的设置方法和解决方案。

    完美解决跨域iframe的高度自适应

    完美解决跨域iframe的高度自适应,完美解决跨子域iframe的高度自适应,嵌入几个页面解决跨域iframe的高度自适应。。。

    iframe跨域调用父窗口js.zip

    在实际应用中,根据项目需求和浏览器兼容性,可以选择合适的方法实现iframe跨域调用父窗口的JavaScript方法。同时,注意安全问题,避免恶意代码通过跨域通信窃取敏感信息。 以上就是关于iframe跨域调用父页面js方法...

    chrome 浏览器跨域插件下载

    安装此插件后,开发者可以查看和模拟API调用,包括修改请求头和参数,以便在开发过程中更好地理解和解决可能出现的跨域错误。Moesif Origin 插件能够显示详细的请求和响应数据,帮助开发者诊断和调试跨域问题,提高...

    iframe 跨域 自动适应高度

    创建一个与父页面同源的代理页面,这个页面负责加载跨域的子页面并返回其高度,然后由父页面根据返回的高度设置`iframe`的高度。 - **JavaScript定时检测** 父页面每隔一定时间检测`iframe`的`contentDocument`...

    iframe 跨域

    因此,在实现跨域通信时,开发者需要充分考虑安全性,避免敏感信息泄露。 6. 应用场景:跨域`iframe`常见于广告嵌入、第三方支付接口、社交分享、页面预加载等场景。 综上所述,解决`iframe`跨域问题需要对浏览器...

    iframe跨域解决方案

    对于`iframe`加载的资源,还可以使用`sandbox`属性来开启沙盒模式,限制`iframe`的某些行为,比如禁止JavaScript执行,以提高安全性。不过,这会限制`iframe`与父页面的通信能力,需谨慎使用。 综上所述,`iframe`...

    跨域 iframe 实例 (Cross-Domain Javascript execution library)

    跨域iframe是一个常见的Web开发技术,它允许网页嵌入来自不同源的iframe,以实现不同域之间的数据交互或页面组合。在JavaScript执行库的上下文中,"跨域iframe"通常指的是一个工具或方法,用于在iframe之间安全地...

    chrome浏览器跨域插件

    chrome浏览器跨域插件,在谷歌浏览器使用开发测试时,经常遇到跨域测试,可以使用该插件获得帮助

    iframe跨域通信解决方法

    本文档将详细介绍如何在Vue项目或普通Web页面中利用`postMessage`API来实现`iframe`的跨域通信。 #### postMessage API简介 `postMessage`是一个允许不同源窗口之间进行安全通信的浏览器API。它被设计用来解决同源...

    解决showModalDialog 跨域 iframe

    2. **创建iframe**:在主页面中,创建一个`iframe`元素,设置其`src`属性为要加载的跨域URL。 ```html &lt;iframe id="modalIframe" src="https://example.com/modal"&gt;&lt;/iframe&gt; ``` 3. **通信机制**:由于`...

Global site tag (gtag.js) - Google Analytics