在任何涉及交易的系统中,客户与商家之间的交易数据具有核心作用,如购买商品的价格、数量、型号和优惠券等。在客户挑选商品的过程中,这些交易数据逐渐形成;待客户提交订单时,交易数据被商家接收,形成双方认可的订单。交易数据在形成过程中必须要有可靠的临时存储,而不可靠的存储会允许攻击者提交伪造的交易数据,使商家利益受损。

iFlow 业务安全加固平台 可以将交易过程中产生的数据动态保存在后端,这样攻击者仅仅依靠篡改前端数据,是无法通过后端的数据检查的。


以某个购物网站为例,在接收客户提交订单时,网站直接使用了之前产生的数据,而这些数据是能够被攻击者篡改的。使用 iFlow 可以在不修改网站源代码的前提下,实现交易数据在后端的自动保存和校验。

一、依赖前端数据的原始网站

原始网站在用户提交订单时直接使用之前的金额数据,攻击者能够使用专用工具提交任意的金额数据。

1.1 正常用户访问

在客户选好商品进入结算页面时,页面上显示了金额 (实付款) 数据,在表单的隐藏域中也包含了这个数据。

客户点击提交订单按钮后,包括金额在内所有交易数据被传到后端并写入到订单记录中。

反映在 HTTP 协议层面,是如下交互的:

sequenceDiagram
participant 正常用户
participant 浏览器
participant Web服务器
正常用户->>浏览器: 点击:结算
浏览器->>Web服务器: 请求:结算
Web服务器->>浏览器: 返回:结算信息
Note over 浏览器: 表单中包含金额数据
浏览器->>正常用户: 显示:结算页面
正常用户->>浏览器: 点击:提交订单
Note over 浏览器: 提交中包含金额数据
浏览器->>Web服务器: 请求:提交订单
Web服务器->>浏览器: 返回:订单确认
浏览器->>正常用户: 显示:订单确认页面

1.2 攻击者访问

攻击者使用 Burpsuite 工具来作为浏览器和网站之间的代理,Burpsuite 可以拦截报文并修改其中内容后再发出。

攻击者挑选商品的步骤和正常用户一样,在进入结算页面点击提交订单之前,打开 Burpsuite 的拦截按钮。

点击提交订单之后,Burpsuite 拦截并显示出请求报文的内容,可以看到其中包含有金额数据。攻击者将这个数据修改后,向服务器端发出报文。

电商网站产生了这条订单记录,可以看到:它的金额为攻击者篡改过的值。

HTTP 协议层面交互如下:

sequenceDiagram
participant 攻击者
participant 浏览器
participant Web服务器
攻击者->>浏览器: 点击:结算
浏览器->>Web服务器: 请求:结算
Web服务器->>浏览器: 返回:结算信息
Note over 浏览器: 表单中包含金额数据
浏览器->>攻击者: 显示:结算页面
攻击者->>浏览器: 点击:提交订单
Note over 浏览器: 提交中包含金额数据
rect rgb(250, 128, 128)
Note over 浏览器: 修改报文中的金额数据
end
浏览器->>Web服务器: 请求:提交订单
Web服务器->>浏览器: 返回:订单确认
浏览器->>攻击者: 显示:订单确认页面

二、iFlow虚拟补丁后的网站

我们在 Web 服务器前部署 iFlow 业务安全加固平台,它有能力拦截、计算和修改双向 HTTP 报文并具备存储能力,成为 Web 应用的虚拟补丁。本例中,iFlow 通过在服务器端保存前面步骤所产生的数据,使得应用不再依赖于前端发出的信息。

2.1 正常用户访问

用户在进行结算时,iFlow 获得 Web 服务器发出的结算页面,从中提取出金额数据并将其保存在服务器端缓存中。正常用户在提交订单时,提交中的金额值应该与缓存中的金额值一致。

正常用户的 HTTP 协议交互过程如下:

sequenceDiagram
participant 正常用户
participant 浏览器
participant iFlow
participant Web服务器
正常用户->>浏览器: 点击:结算
浏览器->>Web服务器: 请求:结算
Web服务器->>iFlow: 返回:结算信息
rect rgb(160, 250, 160)
Note over iFlow: 记录金额数据
end
iFlow->>浏览器: 返回:结算信息
Note over 浏览器: 表单中包含金额数据
浏览器->>正常用户: 显示:结算页面
正常用户->>浏览器: 点击:提交订单
Note over 浏览器: 提交中包含金额数据
浏览器->>iFlow: 请求:提交订单
rect rgb(160, 250, 160)
Note over iFlow: 检验金额数据:一致
end
iFlow->>Web服务器: 请求:提交订单
Web服务器->>浏览器: 返回:订单确认
浏览器->>正常用户: 显示:订单确认页面

2.2 攻击者访问

如前所示,攻击者在提交订单时,会使用工具强行修改请求报文中金额数据的值。这个提交到达 iFlow 时,iFlow 会发现提交中的金额值与缓存中的金额值不一致,于是终止交易。

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

sequenceDiagram
participant 攻击者
participant 浏览器
participant iFlow
participant Web服务器
攻击者->>浏览器: 点击:结算
浏览器->>Web服务器: 请求:结算
Web服务器->>iFlow: 返回:结算信息
rect rgb(160, 250, 160)
Note over iFlow: 记录金额数据
end
iFlow->>浏览器: 返回:结算信息
Note over 浏览器: 表单中包含金额数据
浏览器->>攻击者: 显示:结算页面
攻击者->>浏览器: 点击:提交订单
Note over 浏览器: 提交中包含金额数据
rect rgb(250, 128, 128)
Note over 浏览器: 修改报文中的金额数据
end
浏览器->>iFlow: 请求:提交订单
rect rgb(160, 250, 160)
Note over iFlow: 检验金额数据:不一致
end
iFlow->>浏览器: 返回:终止交易
rect rgb(250, 128, 128)
浏览器->>攻击者: 返回:终止交易
end

2.3 代码

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

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

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

[
{
"if": [
"REQUEST_FILENAME == '/shopxo-1.6.0/index.php'",
"@ARGS.s == '/index/buy/index'"
],
"then": {
"execution": {
"directive": "setVariable",
"variable": "SESSION.payment_amount",
"value": "match(RESPONSE_BODY, 'class=\"nav-total-price\">(.*)</em>', 0, 1)"
}
}
},
{
"if": [
"REQUEST_FILENAME == '/shopxo-1.6.0/index.php'",
"@ARGS.s == '/index/buy/add.html'",
"SESSION.payment_amount != @ARGS.price"
],
"then": {
"verdict": {
"action": "deny",
"log": "Price tampered: ${SESSION.payment_amount} => ${ARGS.price}"
}
}
}
]

示例代码中有两条规则,分别作用如下:

第一条规则

服务器返回结算页面时,iFlow 在响应报文中提取金额数值,并存放在此会话 (SESSION)的存储变量 payment_amount 中。

第二条规则

当浏览器请求提交订单时,iFlow 检查请求参数 price 的值与会话 (SESSION) 的存储变量 payment_amount 的值是否相等,如果不相等则阻止该用户的继续操作。

注意:上述会话中的 payment_amount 标志是保存在服务器端的 iFlow 存储中的,在浏览器端是看不到数据,更无法篡改的。

三、总结

iFlow 使用两条规则在不修改服务器端代码的前提下,透明地实现了在后端的金额验证逻辑。

通过这个例子可以看出,iFlow 与一般 WAF 的一个重要区别——iFlow 的规则是根据应用的实际情况和对安全功能的特定需求量身定制的,它不具备开箱即用的特点但却适合构造复杂的防护逻辑。(张戈 | 天存信息)

WEB安全新玩法 [3] 防护交易数据篡改的更多相关文章

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

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

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

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

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

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

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

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

  5. WEB安全新玩法 [6] 防范图形验证码重复使用

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

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

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

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

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

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

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

  9. 自定义 checkbox 新玩法 ?

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

随机推荐

  1. Asp.NetCore Web开发之会话技术

    这节讲一下会话技术,首先了解一下什么是会话,会话是指浏览器打开到关闭的过程中,多次与服务器发送接收数据的过程. 由于HTTP是无状态协议,一次请求响应过后,产生的数据就随之释放了,可是在某些情况下,我 ...

  2. [题解] CF786B Legacy

    前言 题目链接 题意 有 \(n\) 个点,\(q\) 次连边,以及起点 \(s\) .连边具体分三种: \(1\) \(v\) \(u\) \(w\) 从 \(v\) 到 \(u\) 连一条边. \ ...

  3. slickgrid ( nsunleo-slickgrid ) 8 区域选择与复制粘贴

    区域选择 区域选择是通过插件CellRangeSelector实现的,默认不支持跨冻结列进行选择,修正了选择,支持跨冻结列,代码如下,通过判断选择的起点和终点所落在的冻结范围进行计算,如从左往右进行复 ...

  4. Apache Hudi集成Spark SQL抢先体验

    Apache Hudi集成Spark SQL抢先体验 1. 摘要 社区小伙伴一直期待的Hudi整合Spark SQL的PR正在积极Review中并已经快接近尾声,Hudi集成Spark SQL预计会在 ...

  5. 25.数据结构,LinkedList ,泛型,类型通配符

    3.数据结构 数据结构是计算机存储,组织数据的方式.是指相互之间存在的一种或多种特定关系的数据元素的集合 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 ---------常见的数据结构 ...

  6. MakeCode图形编程应用在micro:bit上的多工性能实测

    1. 简述 本文不涉及对测试中所用到的设备或软件的推广. micro:bit 是一款由英国广播电视公司(BBC)为青少年编程教育设计,并由微软,三星,ARM,英国兰卡斯特大学等合作伙伴共同完成开发的微 ...

  7. Select Screen 0 with xrandr Ask QuestionScreen 0" here describes your whole virtual display made of these two outputs: eDP-1-

    Screen 0" here describes your whole virtual display made of these two outputs: eDP-1-1: physica ...

  8. MySQL配置HeartBeat实现心跳监控和浮动IP

    1. 初始化环境配置 /sbin/chkconfig --add mysqld /sbin/chkconfig mysqld on ln -s /usr/local/mysql/bin/mysql / ...

  9. Docker的介绍和安装(1)

    一.虚拟化简介 1.虚拟化概念 计算机虚拟化(Computing Virtualization),一种资源管理技术,是指通过虚拟化技术将一台计算机的各种实体资源 , 如处理器 , 网络 , 内存及存储 ...

  10. Java 四种内置线程池

    引言 我们之前使用线程的时候都是使用 new Thread 来进行线程的创建,但是这样会有一些问题 每次 new Thread 新建对象性能差 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可 ...