防重放、防篡改攻击的实现(Java版)

news2024/11/28 6:31:44

文章目录

  • 一、问题描述
    • 1、什么是重放攻击、篡改攻击?
    • 2、如何模拟重放攻击、篡改攻击?
      • 2.1、重放攻击模拟方式
      • 2.2、篡改攻击模拟方式
  • 二、解决方案
  • 三、在项目中使用
    • 1、项目简介
    • 2、项目实践

一、问题描述

1、什么是重放攻击、篡改攻击?

1、重放攻击:请求被攻击者获取,并重新发送给认证服务器,从而达到认证通过的目的。
2、篡改攻击:请求被攻击者获取,修改请求数据后,并重新发送给认证服务器,从而达到认证通过的目的。

2、如何模拟重放攻击、篡改攻击?

2.1、重放攻击模拟方式

1、使用谷歌浏览器的F12工具,在“网络”中任意找一个已经发送过的请求,鼠标右键这个请求,就可以看到“重放XHR”选项了,这个就是请求重放,即:重新发送一次该请求。如下图所示:

在这里插入图片描述

2、借助抓包工具,例如:Fiddler。这里以Fiddler为例,打开Fiddler找到刚刚的请求,鼠标右键可以看到“Replay->Reissue Requests”选项,这个就是重放请求。如下图所示:

在这里插入图片描述

2.2、篡改攻击模拟方式

由于浏览器的局限性,并不是所有浏览器都提供修改请求的工具的。这里就以Fiddler为例,打开Fiddler找到刚刚的请求,鼠标右键可以看到“Replay->Reissue and Edit”选项,这个就是篡改请求。如下图所示:

在这里插入图片描述

二、解决方案

常见的技术方案有timestamp、nonce、timstamp+nonce、公钥+私钥等方式,这里就不展开聊了,因为这块资料实在太多了,如果需要了解的,可以参考以下资料:
1、防重放攻击方案介绍
2、RSA 加密,解密,签名,验签

三、在项目中使用

1、项目简介

由于项目比较老,使用的技术框架也相对落后,framework7+Spring+SpringMVC+Ibatis,根据现有项目的情况,进行技术选型,初步决定使用客户端使用私钥签名,服务端使用公钥验签,校验数据的有效性的方案。

2、项目实践

1、在framework7.js中,将所有ajax请求(POST类型)的data(即业务数据)进行MD5加密,并将加密后的签名放入header中传给服务端。
2、服务端在拦截器中接收到该请求后,将原始(未加密)的业务数据进行加密(注意:需要和客户端使用相同的加密算法和KEY),将加密后的内容与header中的签名进行比对,若一致,表示该请求有效,若不一致,则表示该请求为非法请求。

注:上面这种方案,在验证过程中有很多弊端,例如:

1、前后端参数顺序不一致导致的生成签名不一致。
产生原因:前端组装的参数传到后端时,参数的顺序大概率不一致。
解决办法:统一将前端参数按ASCII进行重排后再加密,后端也是如此,即可解决。

2、前后端自带json序列化API导致参数顺序错乱。
产生原因:参数重排后,在加密前,需要将参数转换为字符串后进行加密,就是这里转换出现的问题。
解决办法:进一步解析参数中的对象/数组,并进行ASCII重排,即可解决。

3、参数中空对象字符串转义后变成‘%7B%7D’。
产生原因:前端会将空对象进行转义,但是后端接收到空对象时并不会显示转义后的结果。
解决办法:在后端过滤掉空对象的情况。

4、数据中前后空格,导致前后端加密结果不同。
产生原因:参数中某些字符串类型的值前后面会有空格的情况,前端也会对空格进行转义。
解决办法:前后端都是用trim处理有空格的情况。

5、字符串存在"null"、字符串中间存在空格、特殊字符’\n’等情况。
产生原因:历史代码原因,有这种特殊的情况。
解决办法:前后端分别进行特殊处理。

6、参数中存在~!*()_.'等特殊符号不会被转义。
产生原因:前端特殊字符转义规则与后端有所不用,双方不一致,导致加密后的结果不一样。
解决办法:前后端分别将特殊字符进行过滤,过滤后的内容保持一致,保证加密的结果一致。

注:以上的问题都是在代码实现过程中遇到的,并且都找到解决办法了,但是这个改造的成本太大了,而且特殊情况太多,也是一个不稳定的因素,最终决定弃用这个方案。

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

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

相关文章

【SSM框架】为集合类型属性赋值

🍓个人主页:个人主页 🍒系列专栏:SSM框架 目录 1.为集合类型属性赋值 ①为List集合类型属性赋值 ②为Map集合类型属性赋值 2.p命名空间 3.引入外部属性文件 1.为集合类型属性赋值 ①为List集合类型属性赋值 在Clazz类中添加…

中国三大主流开源Linux操作系统社区及其产品生态

作者:IT圈黎俊杰 操作系统是基础软件的核心,是科技研发必备的底层支撑产品,它的核心技术至今仍然由美国为代表的西方国家所掌控着。由于以前国产操作系统产业长期处于“多、小、散”的状态,未能建立起完善的生态、未能研发出真正好…

python笔记(一)

文章目录字节对象与字符转换动态爬虫实施辅助工具python 部分内置方法示例:python虚拟环境的创建与激活执行多个.py程序获取当前系统默认浏览器名称反编译小程序PC端小程序(wxapkg)解密:反编译字节对象与字符转换 data1 babc # …

计算机系统实验-BombLab

一.实验题目及目的 1.实验题目 程序运行在linux环境中。程序运行中有6个关卡(6个phase),每个phase需要用户在终端上输入特定的字符或者数字才能通关,否则将会引爆炸弹。需要通过分析汇编代码,使用gdb调试等方式找到正…

oracle入门-19c 安装详细教程

我们知道学习一门技术,第一件事情就是搭建对应的环境。本教程将详细教大家如何安装oracle。 目录一、虚拟机创建二、挂载镜像、安装及系统配置三、 软件包传输四、数据库安装五、 图形化向导建库一、虚拟机创建 处理器数量根据自己的机器配置进行调整(4 …

Android IPC机制

本文首发于个人博客 “胖蔡叨叨叨”,更多相关信息可点击查看《Android IPC机制》​​​​​​​ IPC IPC(Inter Process Communication) 进程间通信,是指系统中运行的不同进程间的信息交互过程。Android IPC通常用于应用间、或同应用不同进程间的数据通…

3分钟读懂数据可视化如何帮助企业智慧管理,提升管理水平

随着大数据时代的到来,企业管理的决策越来越倚重数据指标,通过数据指标了解公司运作的情况,产品生产销售情况,收入与支出情况等等,更大的作用是对商业趋势预测提供了决策依据,使公司提前布局未来&#xff0…

Q-Automation:基于ATX的自动化测试管理软件

Softing Q-Automation是基于ATX的自动化测试管理软件,用于测试电子控制单元(ECU)。该软件支持诊断协议层测试和诊断功能测试,并且只需填写Excel表格,即可实现半自动化测试需求,从而缩短了用户的测试周期。同…

2022年终Java编程技术总结

目录 00 总体脑图 第一章、基础篇 01 计算机基础 ## 1.1 操作系统 1.1.1 基本知识 略 1.1.2 常见Linux命令 目录文件内容搜索系统类网络权限cdcp/scpvi/vimfind: find . -name xxkillnetstat -anchmodlsmvcatgrep: ps -efgrep xxlsof: lsof-i:portmkdirrmtailwhereistopp…

web前端期末大作业 ——电影主题介绍 你好,李焕英 ——html+css+javascript网页设计实例

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Win11电脑蓝屏怎么办?Win11电脑蓝屏的修复方法

Win11电脑蓝屏怎么办?电脑蓝屏是最为常见的系统故障问题之一,当电脑出现蓝屏时一般分为可以开机以及无法开机的情况,针对这两种情况,下面小编分别准备了对应的解决方法,有需要的朋友们欢迎收藏慢慢看哦。 方法一&#…

家居类小红书达人投放总结,kol执行策略

在小红书平台上,许多品牌方都做了达人投放,但结果却反响平平,最后才发现是达人挑选出了问题,而发现这个问题的代价就是错失先机,也耗费大量成本来试错,今天为大家分享一下小红书达人投放总结以及超硬干货。…

多线程安全问题原理和4种解决办法

摘要:多线程访问了共享的数据,会产生线程安全问题。本文分享自华为云社区《多线程安全问题原理和解决办法Synchronized和ReentrantLock使用与区别》,作者:共饮一杯无。 线程安全问题概述 卖票问题分析 单窗口卖票一个窗口(单线程)卖100张票…

大数据学习 -- 利用Java API 将文件写入HDFS

利用API写入文件写入HDFS文件(1)将数据直接写入HDFS文件(2)将本地文件写入HDFS文件写入HDFS文件 类似于HDFS Shell里的hdfs dfs -put命令在net.zwh.hdfs包里创建WriteFileOnHDFS类 (1)将数据直接写入HDFS…

【记录】ChatGPT|注册流程、使用技巧与应用推荐(更新至2022年12月14日)

昨天,2022年12月13日,在下午和晚上,ChatGPT 就开始因为请求过多而写到一半就崩溃,出现network error,可见它的关注度确实是越来越可观了。 正好最近世界杯,有博客活动,干脆也总结一下 ChatGPT 目…

大白话讲懂word2vec原理和如何使用

前言 做自然语言处理(Natural Language Processing,NLP)这个领域的小伙伴们肯定对word2vec这个模型很熟悉了,它就是一种最为常见的文本表示的算法,是将文本数据转换成计算机能够运算的数字或者向量。在自然语言处理领…

【Docker】Dockerfile从概念介绍到快速上手编写案例实战

本期目录1. Dockerfile介绍1.1 Dockerfile的重要性1.2 构建三步骤2. Dockerfile构建过程2.1 Dockerfile内容基础2.2 Dockerfile执行流程2.3 总结3. Dockerfile常用保留字指令3.1 Dockerfile常用保留字一览3.2 保留字讲解4. 案例演示-自定义CentOS镜像4.1 前期准备4.2 编写Docke…

黑白图片怎样上色?教你如何给黑白照片上色

平时我们在网上浏览照片时,就会经常看到一些黑白色的照片。自从前段时间的复古风出现之后,很多小伙伴都会给自己拍摄的一些照片加上黑白滤镜,让原本彩色的照片变成了黑白色的,那大家知道黑白照片怎么变成彩色照片吗?今…

xxljob 自动清理日志的业务逻辑,以及涉及到的文件

目录 1 需求2 实现3 JobLogFileCleanThread1 需求 xxljob定时任务,会产生很多的日志文件,那么他是如何自动清除的呢? 2 实现 我们自己的项目集成了xxljob之后,会在yml里面有一个配置 ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, # 限制值大于等于3时生效; …

物联网通信技术第7章 自组织网络(非常全,持续更新)

目录 知识点要求 7.1自组织网络概述 7.1.1 自组织网络的定义(掌握) 7.1.2 自组织网络的特点 (理解) 7.1.3 自组织网络的应用 7.2 自组织网络的体系结构(了解) 7.2.1 节点结构 7.2.2 自组织网络的网…