优雅地关闭iframe周围的框架(工具栏)

时间:2008-09-26 19:28:39

标签: javascript html xss

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

该工具提供增强的搜索功能(透明的last.fm结果,没有广告,没有跛足,没什么令人毛骨悚然的),我发现显示搜索的最有用和不显眼的方式是使用备受诟病的iframe作为工具栏。这允许用户在不破坏用户关注的情况下加载搜索。

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

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

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

使用Javascript我添加了“后退”和“前进”按钮,其中包含从父级链接调用的历史记录对象(当用户搜索结果加载到iframe时,后退按钮允许他们返回完成使用/仔细阅读搜索结果后到主站点。)

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

我检查了PHP $ GLOBAL / $ _ SERVER变量,看看我可能会幸运。我理解存在安全问题,但是我没有看到这个特定的函数与history.back()有什么不同,浏览器在没有'通知'我的父框架的情况下进行调用。

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

看起来框架似乎是为了偷窗而无法优雅地“突破”并保持用户会话的完整性。

难怪人们讨厌他们。 :)

3 个答案:

答案 0 :(得分:2)

在Google图片搜索中,当您移除框架时,它会按照您当前的建议运行,方法是返回原始帧源。由于XSS的原因,找不到当前位置,如果它被认为是一个错误并在随后的浏览器补丁中修复,那么如果存在这样的怪癖可能不是最好的。不过,优雅地突破而不露出位置的方法会很好。这可能是您可以向HTML5小组提出的建议。

答案 1 :(得分:0)

并不是说它真的太有用了,但是你最接近的是检测是否有人实际离开了原始帧源页面。导航框架时,历史记录对象会保留条目,如果页面加载时的原始历史记录长度大于某人点击“突破此框架...”时的历史记录长度,那么您就知道他们正在框架中浏览

答案 2 :(得分:0)

我很感激你(hal10001)和Zach花时间回答。由于xss的安全问题,我觉得我很糟糕(我怀疑)。

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

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

再次感谢!