V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SecurityX
V2EX  ›  分享发现

为什么 Web 端登录需要验证码?

  •  
  •   SecurityX · 2020-07-29 15:14:34 +08:00 · 1644 次点击
    这是一个创建于 1571 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很多朋友们对于登录必然遇到的验证码这个事情很不理解,增加用户操作的冗余性,直接登录很方便,为什么 web 端登录要添加个验证码?直到上周,一家做业务安全的公司给出我们现在 Web 网站的安全报告,我才意识到:验证码的本质属性安全性,除了防止恶意破解密码、刷票、羊毛党、论坛灌水、爬虫等行为外,还是用户与网站信息安全的有力保障。

    下面是我们安服技术人员给的从安全角度看,为什么 Web 登录需要验证码?

    因为你的 WEB 站有时会碰到客户机恶意攻击。其中一种很常见的攻击手段就是身份欺骗,它通过在客户端脚本写入一些代码,然后利用其客户机在网站、论坛反复登陆,或者攻击者创建一个 HTML 窗体,其窗体如果包含了你注册窗体或发帖窗体等相同的字段,然后利用"http-post"传输数据到服务器,服务器会执行相应的创建帐户,提交垃圾数据等操作。如果服务器本身不能有效验证并拒绝此非法操作,它会很严重耗费其系统资源,降低网站性能甚至使程序崩溃。

    下面引用 2 个常见的 HTML 攻击举例说明:

    1 、HTML 语法暴露的账户安全问题

    标准的 HTML 语法中,支持在 form 表单中使用<input></input>标签来创建一个 HTTP 提交的属性,现代的 WEB 登录中,常见的是下面这样的表单:

    <form action = "http://localhost:8080/Application/login" method = "POST"> 用户名:<input id="username" name="username" type="text" /> 密码:<input id="password" name="password" type="password" /> <button type="submit">登陆</button></form>

    form 表单会在提交请求时,会获取 form 中 input 标签存在 name 的属性,作为 HTTP 请求的 body 中的参数传递给后台,进行登录校验。

    undefined

    例如账号是 user1,密码是 123456,那么在提交登录的时候会给后台发送的 HTTP 请求如下( Chrome 或者 FireFox 开发者工具捕获,需开启 Preserve log ):

    undefined

    可以发现即便 password 字段是黑点,但是本机仍以明文的形式截获请求。

    2 、HTTP 协议传输直接暴露用户密码字段

    在网络传输过程中,被嗅探到的话会直接危及用户信息安全,以 Fiddler 或 Wireshark 为例,发现捕获的 HTTP 报文中包含敏感信息:

    undefined

    而现在流行的判断访问 WEB 程序是合法用户还是恶意操作的方式,就是采用一种叫“字符校验”的技术,WEB 网站像现在的动网论坛,他采用达到方法是为客户提供一个包含随即字符串的图片,用户必须读取这些字符串,然后随登陆窗体或者发帖窗体等用户创建的窗体一起提交。

    那么该怎么办?有什么防护的办法呢?这时候我们的安全研究人员就发明了验证码。具体发明史记介绍详见我前几篇文章的介绍。因为人的话,可以很容易读出图片中的数字,但如果是一段客户端攻击代码,通过一般手段是很难识别验证码的这样可以确保当前访问是来自一个人而非机器和 AI 机器人。

    验证码:就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止 OCR ),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。 

    典型应用场景:

    • 网站安全:垃圾注册、恶意登录、恶意攻击
    • 数据安全:数据爬取、数据破坏、账号盗用
    • 运营安全:恶意刷单、虚假秒杀、虚假评论、占座、刷票
    • 交易安全:虚假交易、恶意套现、盗卡支付

    意义:现在网站为了防止用户利用机器人自动注册、登录、灌水、刷票、薅羊毛等,都采用了验证码技术。

    当下,随着科技的发展,验证码在交互形式上也得到了很大的提升,越来越注重用户体验,比如顶象的智能无感验证,推出了无需验证即可判别使用者身份的验证体系,其原理其实也非常简单。风控引擎在用户尝试登陆或者做其他传统需要验证的操作行为前,就会对操作环境进行扫描,并对一些关键参数做分析,包括常用 IP 、地理位置、使用习惯、恶意特征、设备指纹等。基于大量模型和数据的分析,风控引擎便可以对用户身份做出一个预先的判断。如果风控引擎认为使用者是“好人”,便直接放行;如果判定为“机器”,则不予放行;如果存疑,便给出验证码滑一滑。

    验证码能有效防止对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式(比如 12306 、各大银行网上个人银行登录页,BBS 论坛等),虽然登陆麻烦一点,但是对网站还来说这个功能还是很有必要,也很重要。

    1 条回复    2020-07-29 15:44:28 +08:00
    imn1
        1
    imn1  
       2020-07-29 15:44:28 +08:00
    你的推广隐藏得这么深,不按套路出牌啊,🐶
    域名差点以为是丁香……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.