`
zl378837964
  • 浏览: 189701 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

web の 浮层登录框的隐患

    博客分类:
  • web
阅读更多

传统的登录框

在之前的文章流量劫持危害详细讲解了 HTTP 的高危性,以至于重要的操作都使用 HTTPS 协议,来保障流量在途中的安全。

这是最经典的登录模式。尽管主页面并没有开启 HTTPS,但登录时会跳转到一个安全页面来进行,所以整个过程仍是比较安全的 —— 至少在登录页面是安全的。

对于这种安全页面的登录模式,黑客硬要下手仍是有办法的。在之前的文章里也列举了几种最常用的方法:拦截 HTTPS 向下转型、伪造证书、跳转钓鱼网站。

其中转型 HTTPS 的手段最为先进,甚至一些安全意识较强的用户也时有疏忽。

然而,用户的意识和知识总是在不断提升的。尤其在如今各种网上交易的时代,安全常识广泛普及,用户在账号登录时会格外留心,就像过马路时那样变得小心翼翼。

久而久之,用户的火眼金睛一扫地址栏即可识别破绽。

因此,这种传统的登录模式,仍具备一定的安全性,至少能给用户提供识别真假的机会。

华丽的登录框

不知从何时起,人们开始热衷在网页里模仿传统应用程序的界面。无论控件、窗口还是交互体验,纷纷向着本地程序靠拢,效果越做越绚。

然而华丽的背后,其本质仍是一个网页,自然掩盖不了网页的安全缺陷。

当网页特效蔓延到一些重要数据的交互 —— 例如账号登录时,风险也随之产生。因为它改变了用户的使用习惯,同时也彻底颠覆了传统的意识。

乍一看,似乎也没什么问题。虽然未使用登录页跳转,但数据仍通过 HTTPS 传输,途中还是无法被截获。

HTTP 页面用 HTTPS 有意义吗?

如果认为这类登录框没什么大问题,显然还没领悟到『流量劫持』的精髓 —— 流量不是单向的,而是有进也有出。

能捕获你『出流量』的黑客,大多也有办法控制你的『入流量』。这在流量劫持第一篇里也详细列举了。

使用 HTTPS 确实能保障通信的安全。但在这个场合里,它只能保障『发送』的数据,对于『接收』的流量,则完全不在其保护范围内。

因为整个登录框都当作『虚拟窗口』嵌套在主页面里的,因此其中的一切都在同个页面环境里。而主页面使用的仍是不安全的 HTTP 协议,所以注入的 XSS 代码能轻而易举的控制登录框。

当然,或许你会说这只是设计缺陷。若是直接嵌入 HTTPS 登录页的 iframe 框架,那就会因同源策略而无法被 XSS 控制了。

这样的改进确实能提高一些安全性,但也只是略微的。既然我们能控制主页面,里面显示什么内容完全可以由 XSS 说了算。不论什么登录框、框架页,甚至安全插件,我们都可以将其删除,用看起来完全相同的文本框代替。得到账号后,通过后台反向代理实现登录,然后通知前端脚本伪造一个登录成功的界面。

所以,HTTPS 被用在 HTTP 页面里,意义就大幅下降了。

和『缓存投毒』配合出击

在流量劫持第二篇里提到『HTTP 缓存投毒』这一概念,只要流量暂时性的被劫持,都可导致缓存长期感染。但这种攻击有个前提,必须事先找到站点下较稳定的脚本资源,做投毒的对象。

传统登录

在传统的登录模式里,缓存投毒非常难以利用:

HTTPS 资源显然无法被感染。

而使用 HTTPS 向下转型的方案,也会因为离开劫持环境,而无法访问中间人的 HTTP 版登陆页面,导致缓存失效;或者这个真实的 HTTP 版的登录页面根本就不接受你的本地缓存,直接重定向到正常的 HTTPS 页面。

因此只有在主页面上,修改链接地址,让用户跳转到钓鱼网站去登录,才能勉强利用。

浮层登录

制作一个精良的浮层登录框,需要不少的界面代码,所以经常引用 jQuery 这类通用脚本库。而这些脚本往往是长久不会修改的,因此是缓存投毒的绝好原料。

所以,浮层登录框的存在,让『缓存投毒』有了绝佳的用武之地。

在之前的文章 WiFi流量劫持 —— JS脚本缓存投毒,演示了如何利用 www.163.com 下的某个长缓存脚本进行投毒,最终利用网易的浮层登录框获取账号。尽管网易也使用 HTTPS 传输账号数据,但在流量攻击面前不堪一击。

尽管这种登录模式风险重重,但最近百度也升级成浮层登录框,并且还是所有产品。所以,我们再次尝试那套的古老方法,看看在如今是否仍能发起攻击。

我们选几个最常用的产品线,进行一次缓存扫描:

果然,每个产品线里都有长期未修改、并且缓存很久的脚本库。

接着开启我们的钓鱼热点,让前来连接的用户,访问任何一个页面都能中毒。

为了让钓鱼热点更隐蔽,这次我们不再使用路由器,而是利用报废的安卓手机(下一篇文章详细讲解如何实现)。

为了不影响附近办公,本文就不演示同名热点钓鱼了,所以随便取了个名字。

接着让『受害者』来连一下我们的热点:

之前正好开着网页,所以很快收到了 HTTP 请求。我们在任何网页里注入 XSS,进行缓存投毒。

(由于原理和之前讲一样,所以这里就省略步骤了)

然后重启电脑,连上正常的 WiFi(模拟用户回到安全的场合)。

打开 tiebai.baidu.com,一切正常。

开始登录了。。。

看看这种浮层登录框,能否躲避我们的从沉睡中唤起的 XSS 脚本:

奇迹依然发生!

由于之前有过详细的原理讲解,因此这里就不再累述了。不过在实战中,缓存投毒+非安全页面登录框,是批量获取明文账号的最理想手段。

不可逆的记忆

如果现在再将登录模式换回传统的,还来得及吗?显然,为时已晚。

当网站第一次从传统登录,升级到浮层登录时,用户大多不会立即输入,而是『欣赏』下这个新版本的创意。确认不是病毒广告弹出的窗口,而是真的官方设计的,才开始登录。

当用户多次使用浮层登录框之后,慢慢也就接受了这种新模式。

即使未来,网站取消了浮层登录,黑客使用 XSS 创建一个类似的浮层,用户仍会毫不犹豫的输入账号。因为在他们的记忆里,官方就曾使用过,仍然保留着对其信任度。

安全性升级

既然这个过程是不可逆的,撤回传统模式意义也不大。事实上,使用浮层的用户体验还是不错的,对于不了解安全性的用户来说,还是喜欢华丽的界面。

要保留体验,又得考虑安全性,最好的解决方案就是将所有的页面都使用 HTTPS,将站点武装到牙齿,不留一丝安全缝隙。这也是未来网站的趋势。

                                                                                                                                                                                查看原文链接  :http://fex.baidu.com/blog/2014/06/danger-behind-popup-login-dialog/ 
分享到:
评论

相关推荐

    web页的浮层

    在Web开发中,"浮层"(Overlay)是一种常见的用户界面设计元素,它通常用于显示弹出式窗口、对话框或者提示信息。浮层能够覆盖在网页内容之上,吸引用户的注意力,提供额外的信息或者功能。在给定的标题和描述中,...

    弹出浮动层漂亮登录框

    在网页设计中,用户交互是至关重要的,而“弹出浮动层漂亮登录框”就是一种增强用户体验的方法。这种设计使得用户在不离开当前页面的情况下,能够方便地进行登录操作,提高了网站的可用性和互动性。本文将深入探讨...

    浮层引导页Demo

    浮层引导页(Floating Guide Page)是应用设计中常见的一种元素,主要用于向用户介绍新功能或引导用户如何使用特定操作。这种页面通常在用户首次打开应用或者更新版本后出现,以提升用户体验并帮助用户快速理解应用...

    PopupWindow仿微信浮层弹出框效果

    PopupWindow仿微信浮层弹出框效果 PopupWindow仿微信浮层弹出框效果是Android开发中常见的一种浮层弹出框效果,通过使用PopupWindow控件可以实现类似微信浮层弹出框的效果。下面将详细介绍PopupWindow仿微信浮层弹...

    点击图片弹出浮层

    在IT行业中,创建一个“点击图片弹出浮层”的功能是一项常见的交互设计,它能提供良好的用户体验,特别是在展示图片集如QQ空间相册时。这个功能的核心在于利用前端技术实现图片预览,允许用户在点击单张图片后,不...

    图片上弹出浮层js

    在网页设计中,浮层通常指的是那些在用户与页面互动时突然出现的覆盖层,比如信息提示、模态框或者图片预览等。这种效果能够吸引用户的注意力,并提供额外的信息或操作选项。下面我们将深入探讨如何使用JavaScript...

    提示浮层跟随鼠标移动

    标题“提示浮层跟随鼠标移动”涉及到的是网页交互设计中的一种常见功能,即动态提示框或者叫气泡提示。这种功能通常用于提供额外的信息或指导,当用户将鼠标悬停在某个元素上时,提示框会出现在鼠标附近,跟随鼠标的...

    浮层(AJAX)(弹出层,并半透明)

    浮层(AJAX)技术是网页开发中一种常见的交互设计手法,它允许在不刷新整个页面的情况下,通过异步通信(Ajax)加载新的内容到页面的特定区域,同时展现出一个半透明的弹出层,以提供更加丰富的用户体验。...

    PagerSlidingTabStrip浮层显示测试

    PagerSlidingTabStrip浮层显示测试完全可以用,在实际项目中经常使用,安卓开发者可以直接下载使用喔 本来亲自测试可以使用 Demo中的PagerSlidingTabStrip是实现了固定的tab个数的方式 如果需要修改成不固定的可以...

    通过遮罩层实现浮层DIV登录的js代码

    在网页设计中,浮层(Layer)是一种常见的交互设计元素,它允许在用户与页面其他内容交互时,弹出一个半透明或全屏的窗口,通常用于显示对话框、提示信息或者如本例中的登录界面。遮罩层(Mask Layer)则是一个覆盖...

    仿新浪微博头像浮层(原生态)

    在IT行业中,网页交互设计是至关重要的一环,而"仿新浪微博头像浮层(原生态)"就是一个典型的网页交互效果示例。这个项目利用纯JavaScript技术实现了一个与新浪微博类似的头像悬停弹出层功能,使得用户在鼠标悬浮在...

    实现第一次打开app引导浮层效果

    在移动应用开发中,"实现第一次打开app引导浮层效果" 是一个常见的用户界面设计实践,目的是为了向新用户介绍应用程序的关键功能或交互方式。这种效果通常被称为新手引导或者新手教程,通过展示一系列的提示视图,...

    浮层微立体阴影风极简时尚黑蓝工作总结ppt模板.rar

    【浮层微立体阴影风极简时尚黑蓝工作总结PPT模板】是一款专为商务人士设计的 PowerPoint 模板,适用于进行年度工作总结、工作计划汇报等场合。该模板以酷黑和深蓝色为主色调,营造出专业且现代的视觉效果,同时融入...

    城市选择浮层插件,全国各大城市含热门城市

    城市选择浮层插件是一种常见的前端交互元素,广泛应用于各种需要用户输入或选择地理位置的场景,如在线购物、旅游预订、求职招聘等。这个插件的核心功能是在输入框上提供一个下拉或弹出的浮层,展示全国各大城市,...

    透明 浮层 DIV

    在网页设计和开发中,"透明浮层DIV"是一个常用的技术,它允许创建一个可交互的、具有透明度效果的浮动元素,常用于弹出窗口、对话框或者自定义控件。下面我们将深入探讨这个主题,包括其原理、实现方法以及浏览器...

    浮层的移动

    浮层,通常是指那些悬浮在页面主内容之上,用于显示额外信息或者功能的元素,比如提示框、菜单、广告等。当用户进行某些操作时,这些浮层会出现在屏幕上,并且可能需要根据用户的交互进行移动。 描述中提到的“NULL...

    Android实时预览摄像头、绘制浮层

    本文将深入探讨如何使用SurfaceView来实现这一功能,并通过在每一帧上绘制浮层展示处理结果。 首先,`SurfaceView`是Android系统提供的一种用于显示视频流的视图组件。它拥有自己的独立的渲染线程,能够高效地处理...

    js实现浮层

    当鼠标悬停在某个区域,便会显示一个矩形方框浮在当前页面,当鼠标移开此区域,矩形方框便会消失,你可以在矩形方框里放置任何你想要的信息,甚至图片。代码很好移植。

    随意拖动浮层显示

    【浮层显示】技术在IT行业中,特别是在GUI(图形用户界面)设计中,是一种常见的功能。浮层,也称为浮动窗口或悬浮面板,通常是指在主应用窗口之上,可以自由移动、调整大小并显示特定信息的窗口。这种设计使得用户...

    Android浮层 弹出窗口demo

    在Android应用开发中,"浮层"或"弹出窗口"是一种常见的交互设计,用于向用户提供临时信息或者引导用户进行特定操作。浮层通常是非模态的,可以在用户与主界面交互的同时出现,不会完全遮挡整个屏幕。下面将详细讨论...

Global site tag (gtag.js) - Google Analytics