商城系统 前后端交互 报文安全性问题 方案设计

news2025/3/2 2:31:20

商城系统在功能定位上需要用户通过互联网访问并完成业务逻辑操作,因此,系统在交互安全性上做出额外设计,描述如下。

  1. 客户端(包含H5客户端以及Web端)与后台服务均通过Https协议进行交互;

    HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。

  2. 客户端的绝大多数操作均须检查用户登录状态,若未登录则直接拒绝;
  3. Web端的绝大多数操作均会校验登录用户的角色和权限,避免越权操作;
  4. 对于敏感字段,如登录密码,使用RSA非对称加密方式进行加密传输;
  5. H5客户端与后台的交互,在Https的基础上,使用随机密钥对请求和返回报文进行对称加密(密钥交换和维护逻辑见下述);
  6. H5客户端与后台之间,增加网关服务,对请求进行登录状态校验、报文解密、签名校验、防重放攻击以及限流等操作,只将合法请求路由到后台服务(签名校验逻辑见下述);
  7. 其他

H5客户端与后台服务间报文加解密设计

参考后文时序图,客户端与商城网关和后台服务间交互、密钥交换和加解密逻辑如下:

  1. 用户由前置系统(公众号)进入商城页面时,需要在URL后携带加密用户信息(具体参考《用户体系设计-客户登录》)
  2. 【客户端】商城客户端页面获取到加密用户信息,生成随机密钥Key,并将Key作为登录请求报文的一个字段
  3. 【客户端】使用Rsa(或SM2)公钥对登录请求报文加密,并通过时间戳和随机数对请求报文生成签名字符串
  4. 【客户端】将签名字符串作为header,将加密请求报文作为body,请求登录接口
  5. 【网关】拦截登录请求,使用Rsa(或SM2)密钥对请求报文进行解密,若解密失败直接返回错误信息
  6. 【网关】对请求报文做签名,并与header中的签名字符串做比对,若比对不通过,则直接返回错误信息,若通过,则将请求转发到后台服务
  7. 【后台】对收到的报文做处理,校验登录信息是否正确,执行登录操作,生成随机token,并将token和对应的用户信息保存到缓存,返回登录成功信息
  8. 【网关】监测到登录成功,从返回报文中获取到token和Key,将token和key保存到缓存中,并使用Key加密返回报文,将加密后报文返回给客户端
  9. 【客户端】获取到返回报文,使用Key解密报文,取出token
  10. 【客户端】后续的请求中均将token作为header项携带,并使用Key对请求报文进行加密,且做报文签名
  11. 【网关】拦截请求,获取token,校验登录状态,若token已失效,则直接返回错误
  12. 【网关】若token有效,从缓存中获取对应的Key,使用该Key解密请求报文,并进行签名校验,校验失败则直接返回错误信息,通过则转发请求至后台服务
  13. 【后台】后台服务正常处理业务逻辑,返回明文报文
  14. 【网关】网关使用Key对返回报文进行加密,将加密报文返回给客户端
  15. 【客户端】使用Key解密返回报文,获取到结果

接口签名设计

接口签名设计主要用于防止抓包后重放攻击。设计思路为:
客户端在请求时,执行以下操作

  1. 在拼接完业务请求(json格式)后,先获取当前的时间戳timestamp,并随机生成一个字符串nonce,
  2. 将timestamp和nonce作为请求体的一部分,拼成完整的请求body;
  3. 使用MD5(body+appSecretKey+timestamp+nonce)计算出签名值sign
  4. 将sign置入请求header中

服务端(网关)收到请求后,执行一下操作

  1. 解密请求报文,获取到body(若解密失败则直接返回异常),从body中获取到timestamp和nonce;
  2. 校验timestamp与当前服务器时间是否相差10分钟以上,若是则拒绝请求;
  3. 校验nonce在缓存中是否存在,若存在则拒绝请求,若不存在,则将nonce写入缓存,10分钟失效;
  4. 计算MD5(body+appSecretKey+timestamp+nonce),与header中的sign比较,若不匹配则拒绝请求,若匹配则正常处理请求;

其中,appSecretKey为分配给客户端的一串密钥字符串。

在这个过程中,对于高级攻击者,可能通过逆向工程获取到前端接口签名逻辑,获取到appSecretKey,从而伪造请求,由于h5客户端暴露在公网,无法完全避免逆向工程,因此本设计主要旨在增加攻击难度、提高攻击门槛

商城-报文加解密-时序图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

弹性盒布局中的flex属性使用

先回顾一下弹性盒的使用,常用的属性有 flex-direction :元素主轴(即横向还是纵向), 可选值有:column 从上到下;column-reverse 从下到上;row 从左到右;row-reverse 从右到左; flex…

pytorch实现经典神经网络:VGG16模型之复现

可以参考https://blog.csdn.net/m0_37867091/article/details/107237671 分成 提取特征网络结构分类结构 模型代码: 此模型写了VGG的几种网络结构 一、官方权重 # official pretrain weights model_urls {vgg11: https://download.pytorch.org/models/vgg11-bb…

vue2.6 和 2.7对可选链的不同支持导致构建失败

有两个vue2项目,构建配置和依赖基本上都一样,但一个可以在 template 模板中使用可选链(?.),另一个使用就报错。 但是报错的那个项目,在另一个同事那又不报错。 已知 node14 之后就支持可选链了,我和同事用的是 node…

【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet

一、说明 在这篇文章中,我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计,并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述: 理论…

Spring framework Day13:注解结合Java配置类

前言 前面我们管理 bean 都是在 xml 文件中去管理,本次我们将介绍如何在 Java 配置类中去管理 bean。 注解结合 Java 配置类是一种常见的 Spring 注入 Bean 的方式。通常情况下,开发人员会使用 Java Config 来定义应用程序的配置信息,而在 …

三维地下管线建模软件MagicPipe3D V3.1.3发布

经纬管网建模系统MagicPipe3D V3.1.3持续更新,内容如下: (1)新增管线流向配置,建模生成带流向箭头管道模型; (2)新增建模完成后可以直接载入3DTiles或obj模型功能; &a…

GoLang开发使用gin框架搭建web程序

目录 1.SDK安装 ​2.编辑器下载 3.编辑器准备 4.使用 4.1常见请求方式 1.SDK安装 保证装了Golang的sdk(官网下载windows.zip->解压,安装,配置bin的环境变量) 2.编辑器下载 Download GoLand: A Go IDE with extended support for JavaScript, Ty…

postman 密码rsa加密登录-1获取公钥

fiddler抓包看到:请求系统地址会自动跳转到sso接口,查看200状态的接口返回的html里存在一个encrypt的信息,咨询开发这个就是返回的公钥。 在postman的tests里对该返回进行处理,获取公钥并设为环境变量 //获取公钥 var pubKey re…

Rancher 使用指南

Rancher 使用指南 Rancher 是什么?Rancher 与 OpenShift / Kubesphere 主要区别对比RancherOpenShiftKubesphere 对比 Rancher 和 OpenShift Rancher 安装 Rancher 是什么? 企业级Kubernetes管理平台 Rancher 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个Kuber…

RT-Thread 内核移植(学习)

内核移植 内核移植就是指将RT-Thread内核在不同的芯片架构、不同的板卡上运行起来,能够具备线程管理和调度,内存管理,线程间同步和通信、定时器管理等功能。 移植可分为CPU架构移植和BSP(Board support package,板级…

催交费通知单套打单纸设置说明

2.0系统打印催交费通知单设置尺寸操作展示如下,仅供参考。具体如下: 一、Win7系统 1.找到设备和打印机,选中对应打印机后点击上方打印服务器属性; 2.创建一个宽14cm,高14cm的表单; 二、win10系统 1.找到打印机,点管理,选择打印首选项;

Unity关键词语音识别

一、背景 最近使用unity开发语音交互内容的时候,遇到了这样的需求,就是需要使用语音关键字来唤醒应用程序,然后再和程序做交互,有点像智能音箱的意思。具体的技术方案方面,也找了一些第三方的服务,比如百度…

当涉及到API接口数据分析时,主要可以从以下几个方面展开

当涉及到API接口数据分析时,主要可以从以下几个方面展开: 请求分析:可以统计每个API接口的请求次数、请求成功率、失败率等基础指标。这些指标可以帮助你了解API接口的使用情况,比如哪个API接口被调用的次数最多,哪个…

2023年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 Python编程(1~6级)全部真题・点这里 第1题:酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上…

《向量数据库指南》——向量数据库与 ANN 算法库的区别

向量数据库与 ANN 算法库的区别 我们经常听到一个这样的错误观念——向量数据库只是在 ANN(approximate nearest neighbor,近似最近邻)算法上封装了一层。但这种说法大错特错。 向量数据库可以处理大规模数据,而 ANN 算法库只能处理小型的数据集 从本质上来看,以 Milvus 为…

Adobe Premiere Pro 和 After Effects 安装出错的解决路径

在有点年头的电脑上安装Premiere Pro 和 After Effects 遇到了前所未有的的麻烦,请了某宝上的小哥进行远程安装,两个软件倒是可以用了,但Win11系统无法正常关机,用了几天系统除了关机时会蓝屏几十秒,其他没有发现毛病&…

centos 7 lamp owncloud

OwnCloud是一款开源的云存储软件,基于PHP的自建网盘。基本上是私人使用,没有用户注册功能,但是有用户添加功能,你可以无限制地添加用户,OwnCloud支持多个平台(windows,MAC,Android&a…

计算机网络 | 物理层

计算机网络 | 物理层 计算机网络 | 物理层基本概念数据通信基本知识(一)一个数据通信流程的例子数据通信相关术语三种通信方式数据传输方式串行传输和并行传输同步传输和异步传输 小结 数据通信基本知识(二)码元(Symbo…

【Java 进阶篇】JavaScript 一元运算符详解

在JavaScript中,一元运算符是一类操作符,它们作用于单一操作数(一个值)。这些运算符执行各种操作,包括递增、递减、类型转换等。本文将详细介绍JavaScript中的一元运算符,解释它们的用途,提供示…

MySQL MVCC详细介绍

MVCC概念 MVCC(Multi-Version Concurrency Control) 多版本并发控制,是一种并发控制机制,用于处理数据库中的并发读写操作,它通过在每个事务中创建数据的快照,实现了读写操作的隔离性,从而避免了读写冲突和数据不一致的问题。 M…