5

我创建了一个与相当流行的音乐零售商一起使用的工具。

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

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

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

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

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

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

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

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

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

难怪人们讨厌他们。:)

4

3 回答 3

2

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

于 2008-09-26T19:36:18.437 回答
0

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

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

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

再次感谢!

于 2008-09-27T15:11:19.470 回答
0

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

于 2008-09-27T01:56:44.153 回答