【问题标题】:Gracefully closing a frame (toolbar) around an iframe优雅地关闭 iframe 周围的框架(工具栏)
【发布时间】:2010-09-13 13:48:06
【问题描述】:

我创建了一个工具,供一家相当受欢迎的音乐零售商使用。

该工具提供了增强的搜索功能(透明的 last.fm 结果,没有广告,没有跛脚,没有什么令人毛骨悚然的东西),我发现显示搜索的最有用和不显眼的方式是使用备受诟病的 iframe 作为工具栏.这允许用户加载搜索而不会窃取用户的注意力。

我不是特别喜欢 iframe,我认为添加“关闭此框架”(ala Google 图片搜索)链接让用户快速轻松地重新获得对浏览器的控制权是微不足道的。

但与 google 不同,我不知道 iframe 中内容的位置是什么(仅知道它开始的位置,通过 src)。

所以现在我发现自己陷入了 XSS 的世界以及所有与安全相关的问题。

使用 Javascript,我添加了“后退”和“前进”按钮以及从父级链接调用的历史对象(当用户进行搜索时,结果会加载到 iframe 中,因此后退按钮允许他们返回在他们完成使用/阅读搜索结果后转到主站点。

有没有办法调用 iframe 中的当前位置并将页面(现在没有框架)重新加载到该位置?

我检查了 PHP $GLOBAL/$_SERVER 变量,看看我可能会走运。我知道存在安全问题,但我看不出这个特定函数与 history.back() 有什么不同,浏览器在没有“通知”我的父框架的情况下自行调用。

我知道我可以从 iframe 本身检索 src 位置,但这当然假定用户没有导航到此页面之外,如果他们这样做了,他们不介意丢失当前位置并被重定向回页面最初由框架调用(...啊...)。

似乎框架旨在窃取窗口,无法优雅地“突破”并保持用户会话的完整性。

难怪人们讨厌他们。 :)

【问题讨论】:

  • 我不确定我是否理解正确。您可以控制主文档,在 iframe 中显示外部文档,并且希望主文档将 iframe 中的任何内容加载为新的主文档?而且iframe中的文档没有任何配合?

标签: javascript html xss


【解决方案1】:

在 Google 图片搜索中,当您移除框架时,它会按照您当前建议的方式运行,方法是返回原始框架源。由于 XSS 的原因,找到当前位置应该是不可能的,如果是这样,它会被认为是一个错误并在后续的浏览器补丁中修复,所以如果存在这样的怪癖,最好不要依赖这样的怪癖。不过,一种在不暴露位置的情况下优雅地突围的方法会很好。这可能是您可以向HTML5 组提出的建议。

【讨论】:

    【解决方案2】:

    并不是说它真的很有帮助,但最接近的方法是检测是否有人真的离开了原始框架源页面。当您浏览一个框架时,历史对象会维护条目,并且如果您在页面加载时的原始历史长度大于有人单击“跳出此框架...”时的历史长度,那么您知道他们正在浏览该框架.

    【讨论】:

      【解决方案3】:

      感谢您 (hal10001) 和 Zach 抽出时间来回答。由于 xss 安全问题,我似乎很糟糕(正如我所怀疑的那样)。

      我想我可以简单地将 所有 内容包装在基于 php 的代理中,但这显然会进入令人毛骨悚然的区域,更不用说增加的延迟等等。

      如果我确实遇到一些理智且可用的东西,我会继续构思这个想法,但在那之前我想我会使用稍微不那么友好的方法来推广原始框架并清除他们当前的位置(如果他们不喜欢我可以重新审视 iframe/工具栏的情况。

      再次感谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2014-12-01
        • 2020-06-29
        • 2021-06-03
        • 2014-11-03
        相关资源
        最近更新 更多