防止使用框架和点击劫持

细节

框架涉及在iFrame中请求Web/WAP站点。这种攻击可以使被包装的站点遭受点击劫持攻击。点击劫持是一个很常见的威胁,已在很多知名网站(例如Facebook)被成功利用来窃取信息或将用户重定向到攻击者控制的站点。

使用框架功能进行攻击的主要目的是欺骗用户点击与他们想要的东西不同的东西。目标是通过一系列漏洞(如跨站脚本)收集机密信息或控制受影响的计算机。这种攻击通常会以脚本的形式嵌入在源代码中,该脚本在用户不知情的情况下执行。当用户单击出现执行其他功能的按钮时,就会触发它。

建议

在iOS中防止这种做法的最佳方法是不使用WebViews。或者,使用

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

需要非常非常小心(点击这里获取更多有关NSString的信息)。

防止框架攻击的一种方法是使用客户端脚本。大多数网站的运行环境中不能没有Javascript,因此在Javascript中实施一些安全措施也是一种选择。尽管是在客户端并且不可篡改,这一层还是会给攻击者提供机会。下面是一段Javascript,可以保证网站在”顶层“框架中,从而”破坏“了恶意将网站加载进子框架的可能。

攻击者可以尝试一些特别的方法来阻止这些”框架破坏代码“,例如在网站卸载时弹框提示用户不要退出。更加复杂的技术也许能够对付它们。至少,包含有基础”框架破坏代码”就会让简单的框架功能变得更加难以处理。

X-FRAME-OPTIONS HEADERA - 一个新的对抗框架选项最近被诸多浏览器所支持,该选项放置在HTTP响应头中。通过在Web服务器层面配置这样一个返回头,浏览器就不会将返回的页面放置在一个框架或者iFrame中。Apache配置范例在后续内容中会出现。

专门为WebView设计的API可能会被滥用,从而危及在WebView中显示的内容。保护应用程序以及它的使用者,避免这类臭名昭著的漏洞方法如下:

  • 正确配置X-Frame-Option返回头来阻止框架加载外域页面内容。然而,这种环节技术可能在操纵多个合法域名时会有点棘手。
  • 实施内部防御机制以保证所有UI元素在顶层框架中。这可以避免当前页面内容被其他非信任域加载。

参考

基础框架破坏脚本:

if( self != top ) { 
  top.location = self.location ;
}

Apache服务端配置阻止在Frame中展示的示例:

Header add X-FRAME-OPTIONS "DENY"

另一个选择是将该配置项的值设置为“SAMEORIGIN”,其仅允许被同域页面加载。该选项头已经通过各种浏览器的测试。如果网站没有加载框架的需求,请将此设置为推荐值“DENY“。

results matching ""

    No results matching ""