在完成关键业务操作时,要求用户输入图形验证码是防范自动化攻击的一种措施。为安全起见,即使针对同一用户,在重新输入信息时也应该更新图形验证码。iFlow 业务安全加固平台可以加强这方面的处理。


某网站系统在登录时要求用户输入图形验证码。如果账号信息错误并得到系统提示后,用户重新输入账号信息时,仍可使用原来的图形验证码。我们看看如何利用 iFlow 使得图形验证码每次都得到更新。

一、原始网站

1.1 正常用户访问

用户在登录时输入了正确的图形验证码字符,如果提交的账号信息有误,系统提示登录错误。

用户仍使用原来的图形验证码字符,提交了正确的账号信息后,系统提示登录成功。

HTTP 交互流程如下:

sequenceDiagram
participant 正常用户
participant 浏览器
participant Web服务器
正常用户->>浏览器: 账号、错误的密码、验证码
浏览器->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录失败
浏览器->>正常用户: 显示:登录失败
正常用户->>浏览器: 账号、正确的密码、原来的验证码
浏览器->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录成功
浏览器->>正常用户: 显示:登录成功

1.2 攻击者访问

用户登录失败,网站没有主动更新图形验证码,而是一段时间内仍接受这个验证码。这个特性具有用户友好性,但增加了安全风险。

这样,攻击者即使没有使用图形验证码识别工具,也可以在人工识别出验证码后,在验证码过期时间之内,使用工具进行多次的撞库请求,并记录下成功登录的账号密码组合。

HTTP 交互流程如下:

sequenceDiagram
participant 攻击者
participant 浏览器
participant 攻击工具
participant Web服务器
攻击者->>浏览器: 账号、错误的密码、验证码
浏览器->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录失败
浏览器->>攻击者: 显示:登录失败
loop 验证码超时时间内
rect rgb(250, 128, 128)
攻击者->>攻击工具: 不同的账号/密码对
end
攻击工具->>Web服务器: 请求:登录
Web服务器->>攻击工具: 返回:登录结果
rect rgb(250, 128, 128)
攻击工具->>攻击者: 记录登录成功的账号/密码对
end
end

二、iFlow虚拟补丁后的网站

我们在 Web 服务器前部署 iFlow 业务安全加固平台,它有能力拦截、计算和修改双向 HTTP 报文并具备存储能力,成为 Web 应用的虚拟补丁。在本例中,iFlow 记录所有出现过的验证码,不允许用户重复使用这些验证码。

2.1 正常用户访问

iFlow 不允许使用重复的验证码。正常用户登录失败后,需要刷新页面或刷新验证码再进行登录。用户如果使用相同的验证码,iFlow 会自动刷新页面并产生新的验证码,用户需要输入新的验证码进行登录。

正常用户的 HTTP 交互流程如下:

sequenceDiagram
participant 正常用户
participant 浏览器
participant iFlow
participant Web服务器
正常用户->>浏览器: 账号、错误的密码、验证码
浏览器->>iFlow: 请求:登录
Note over iFlow: 验证码不在used_vcode中
Note over iFlow: 将验证码加入到used_vcode中
iFlow->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录失败
浏览器->>正常用户: 显示:登录失败
正常用户->>浏览器: 账号、正确的密码、旧的验证码
浏览器->>iFlow: 请求:登录
Note over iFlow: 验证码在used_vcode中
iFlow->>浏览器: 返回:重定向页面
浏览器->>Web服务器: 请求:新登录页面
Web服务器->>浏览器: 返回:新验证码的登录页面
浏览器->>正常用户: 显示:新验证码的登录页面
正常用户->>浏览器: 账号、正确的密码、新的验证码
浏览器->>iFlow: 请求:登录
Note over iFlow: 验证码不在used_vcode中
Note over iFlow: 将验证码加入到used_vcode中
iFlow->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录成功
浏览器->>正常用户: 显示:登录成功

2.2 攻击者访问

如前所示,攻击者首次人工识别出验证码后,用攻击工具连续发出相同验证码的不同账号/密码组合去尝试登录。iFlow 拦截这些请求,发现验证码已使用过,则返回 302 重定向响应。鉴别过程并未在 Web 服务器上进行,攻击者得不到鉴别结果。

攻击者的 HTTP 协议交互过程如下:

sequenceDiagram
participant 攻击者
participant 浏览器
participant 攻击工具
participant iFlow
participant Web服务器
攻击者->>浏览器: 账号、错误的密码、验证码
浏览器->>iFlow: 请求:登录
Note over iFlow: 验证码不在used_vcode中
Note over iFlow: 将验证码加入到used_vcode中
iFlow->>Web服务器: 请求:登录
Web服务器->>浏览器: 返回:登录失败
浏览器->>攻击者: 显示:登录失败
loop 验证码超时时间内
rect rgb(250, 128, 128)
攻击者->>攻击工具: 不同的账号/密码对
end
攻击工具->>iFlow: 请求:登录
Note over iFlow: 验证码在used_vcode中
iFlow->>攻击工具: 返回:重定向页面
rect rgb(250, 128, 128)
攻击工具->>攻击者: 得不到登录是否成功的信息
end
end

2.3 代码

iFlow 内置的 W2 语言是一种专门用于实现 Web 应用安全加固的类编程语言。它介于配置和通用语言之间,具备编程的基本要素和针对 HTTP 协议的特有扩展,能为业务系统编写涉及复杂判断和动态修改的逻辑。

考虑到安全产品的使用者通常为非程序员,他们习惯面对配置文件而非一段代码。因此,W2 语言虽包含语言要素,仍以规则文件方式呈现,并采用可以体现层次结构和方便词法校验的 JSON 格式。

用 W2 语言实现上述虚拟补丁的代码如下:

{
"if": [
"streq(REQUEST_FILENAME, '/shopx/index.php')",
"streq(@ARGS.s, '/index/user/login.html')"
],
"then": {
"if": "contain(SESSION.used_vcode, @ARGS.verify)",
"then": {
"verdict": {
"action": "redirect",
"param": "/shopx/index.php?s=/index/user/logininfo.html",
"log": "user ${SESSION.user} reuse verify code."
}
},
"else": "SESSION.used_vcode@600 = SESSION.used_vcode .. ',' .. @ARGS.verify"
}
}

示例代码只有一条规则,它使用存储变量 used_vcode 记录所有已使用的验证码。当有登录请求时,规则判断验证码请求参数 verify 是否在本会话 (SESSION) 的存储变量 used_vcode 中存在:

  1. 如果存在:表明此请求重用了验证码,直接返回重定向到登录页面的响应。
  2. 如果不存在:表明此请求使用新的验证码,将验证码加入到本会话 (SESSION) 的存储变量 used_vcode 中,继续进行实际的登录鉴别过程。

注意:上述会话中的 used_vcode 是保存在服务器端的 iFlow 存储中的,攻击者在浏览器端是看不到数据更无法进行修改的。

三、总结

iFlow 使用一条规则就可以在不改动后端程序的情形下,避免用户使用重复的验证码。

需要说明的是,文中的解决方案仅是一个示例,其一定程度上影响了人机交互的流畅性。而 iFlow 是一种灵活的类编程语言,使用它应该能写出更完善的处理流程。(张戈 | 天存信息)

WEB安全新玩法 [6] 防范图形验证码重复使用的更多相关文章

  1. WEB安全新玩法 [2] 防范前端验证绕过

    用户登录,几乎是所有 Web 应用所必须的环节.Web 应用通常会加入一些验证手段,以防止攻击者使用机器人自动登录,如要求用户输入图形验证码.拖动滑动条等.但是,如果验证的逻辑仅仅在前端执行,是很容易 ...

  2. WEB安全新玩法 [5] 防范水平越权之查看他人订单信息

    水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源.水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷.iFlow 业务安全加固平台可以缓解部分场景下的水平越权 ...

  3. WEB安全新玩法 [10] 防范竞争条件支付漏洞

    服务器端业务逻辑,特别是涉及数据库读写时,存在着关键步骤的时序问题,如果设计或代码编写不当就可能存在竞争条件漏洞.攻击者可以利用多线程并发技术,在数据库的余额字段更新之前,同时发起多次兑换积分或购买商 ...

  4. WEB安全新玩法 [1] 业务安全动态加固平台

    近年来,信息安全体系建设趋于完善,以注入攻击.跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解.但是,Web 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...

  5. WEB安全新玩法 [4] 防护邮箱密码重置漏洞

    大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置.这一过程容易因设 ...

  6. WEB安全新玩法 [9] 重置密码之验证流程防绕过

    一般来说,业务流程中出现多个操作环节时,是需要顺序完成的.程序设计者往往按照正常用户的操作顺序实现功能,而忽略了攻击者能够绕过中途环节,直接在后续环节上进行非法操作.iFlow 业务安全加固平台能够在 ...

  7. WEB安全新玩法 [3] 防护交易数据篡改

    在任何涉及交易的系统中,客户与商家之间的交易数据具有核心作用,如购买商品的价格.数量.型号和优惠券等.在客户挑选商品的过程中,这些交易数据逐渐形成:待客户提交订单时,交易数据被商家接收,形成双方认可的 ...

  8. WEB安全新玩法 [8] 阻止订单重复提交

    交易订单的重复提交虽然通常不会直接影响现金流和商品流,但依然会给网站运营方带来损害,如消耗系统资源.影响正常用户订单生成.制造恶意用户发起纠纷的机会等.倘若订单对象是虚拟商品,也有可能造成实际损失.订 ...

  9. 自定义 checkbox 新玩法 ?

    自定义 checkbox 新玩法 ? 第一步:selector 编写 drawable/selector_checkbox_voice.xml <?xml version="1.0&q ...

随机推荐

  1. static 静态文件配置

  2. 墙裂推荐一波mysql学习资源

    在日常工作与学习中,无论是开发.运维.测试,还是架构师,数据库是一门必不可少的"必修课", 也是必备的涨薪神器.在互联网公司中,开源数据库用得比较多的当属 MySQL 了. 但my ...

  3. 简单了解 MySQL 中相关的锁

    本文主要是带大家快速了解 InnoDB 中锁相关的知识 为什么需要加锁 首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了. 你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁 ...

  4. 在Visual Studio 中使用git——浏览版本库(七)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  5. [DB] Flink 读 MySQL

    思路 在 Flink 中创建一张表有两种方法: 从一个文件中导入表结构(Structure)(常用于批计算)(静态) 从 DataStream 或者 DataSet 转换成 Table (动态) pa ...

  6. Linux_磁盘管理理论概述

    一.磁盘阵列 1.什么是磁盘阵列? 1️⃣:磁盘整列就是将多块独立的磁盘组合到一起,形成容量大的磁盘组. 2️⃣:将相同的数据存放到不多个的磁盘的不同位置 2.RAID0 1️⃣:RAID0是磁盘整列 ...

  7. Docker Swarm(五)Config 配置管理

    前言 在动态的.大规模的分布式集群上,管理和分发配置文件也是很重要的工作.传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性. Docker 1 ...

  8. sersync 实时同步网站数据

    sersync同步实战 sersync是基于inotify和srync的二次开发,代码托管在github上面在rsync的客户端上安装,下载地址: https://raw.githubusercont ...

  9. gpcj-07.为什么是连锁零售类公司

    1.量化分析的真面目 本课的目的: ·理解零售类公司价值分析的逻辑·学会量化分析公司的思路和原理前言的前沿 和大部分投资者不同,我们的投资核心之一,就是从下而上的分析.宏观经济对我们公司分析影响极少. ...

  10. synchronized 的超多干货!

    前言 synchronized 这个关键字的重要性不言而喻,几乎可以说是并发.多线程必须会问到的关键字了.synchronized 会涉及到锁.升级降级操作.锁的撤销.对象头等.所以理解 synchr ...