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

时间:2020-03-06 14:48:09  来源:igfitidea点击:

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

该工具提供了增强的搜索功能(透明的last.fm结果,没有广告,没有la行,没有令人毛骨悚然),而且我发现显示搜索的最有用和最不干扰的方法是使用一个受害程度很大的iframe作为工具栏。这使用户可以加载搜索而不会失去用户的注意力。

我不是iframe的特别忠实支持者,我认为添加一个关闭该框架(ala Google图片搜索)链接会很简单,以使用户能够快速轻松地重新获得对浏览器的控制。

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

所以现在我发现自己处在XSS和所有与安全相关的问题中。

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

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

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

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

看起来框架似乎是为了窃取窗户而设计的,没有办法优雅地"突围"并保持用户会话的完整性。

难怪人们讨厌他们。 :)

解决方案

在Google图片搜索中,当我们删除框架时,它会返回到原始框架源,从而按照我们当前的建议运行。出于XSS的原因,不可能找到当前位置,如果找到当前位置,则将其视为错误并已在后续的浏览器修补程序中修复,因此,如果存在这样的怪癖,则可能不是最好的选择。不过,一种优雅地突围而又不透露位置的方法将是不错的选择。我们可以向HTML5小组提出建议。

并不是说它真的有太大帮助,但是我们可以找到的最接近的位置是检测是否有人真的离开了原始框架源页面。当我们浏览框架时,历史记录对象将维护条目,并且如果页面加载时原始历史记录长度大于某人单击"突破此框架..."时的历史记录长度,那么我们就知道他们正在该框架中浏览。

感谢我们(hal10001)和Zach抽空回答。由于xss的安全问题,看来我很烂(正如我所怀疑的)。

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

如果确实遇到了一些理智和有用的事情,我会继续讨论,但是直到那时,我猜我只会使用稍微不太友好的方法来推广原始框架并抹去它们的当前位置(如果它们不就像我可以重新审视iframe /工具栏的情况一样。

再次感谢!