前后端H5防篡改、防重放、敏感信息加解密、防XSS攻击方案

完整步骤如下:

1、 前端打开h5页面时,调用后端接口获取后端服务器时间,并计算出后端服务器时间与APP时间偏差。调用后端接口获取后端通讯密钥(公钥)。(APP调用后端就接口传入的时间戳参数Timestamp= APP当前时间+ 【后端服务器时间与APP时间偏差】)。

2、 前端生成一个AES密钥,用通讯密钥(公钥)对其做RSA加密,获得加密后的AES密钥为ENCODE_KEY。

3、  前端将所有业务参数组装成json字符串,上传参数名为FieldVals

4、  前端将业务参数整体json串FieldVals以及其他公共参数按照参数名字进行排序,以value:key的方式一个一个用“|”拼接起来,然后把拼接串前后用括号括起来,接着对其整体做sha1加密(其中sha1的加密密码为AES密钥明文),从而获得数字签名Signture。

伪代码:Sha1((value1:key1|value2:key2|value3:key3))

5、 前端用AES密钥对FieldVals做AES加密,Base64 encode, url encode得到EncodeFieldVals。(前端应该支持根据URL配置或参数名字过滤两种加密策略)

6、 ENCODE_KEY, FieldVals或EncodeFieldVals,Signture以及其他公共参数上传到后端接口(post)。(注意有敏感信息的情况上传EncodeFieldVals,无敏感信息的情况下上传FieldVals, 两者只上传一个)。

7、 后端用通讯密钥(私钥)对ENCODE_KEY 进行RSA解密得到AES密钥。

8、 如果前端有传入EncodeFieldVals,后端对EncodeFieldVals进行url decode, Base64decode,AES解密,得到FieldVals放入httpRequestWapper.

9、  后端把接收到的所有参数按照参数名字进行排序(Signture,EncodeFieldVals除外),以value:key的方式一个一个用“|”拼接起来,然后把拼接串前后用括号括起来,接着整体做sha1加密(其中sha1的加密密码为AES密钥明文),得到的值与Signture做比对,如果不相等,说明被篡改直接返回前端。否则继续下一步。

10、后端获取公共参数Timestamp,拿服务器系统时间减去Timestamp,看是否超过5分钟,如果超过说明请求已经失效,直接返回前端,否则继续下一步。

11、 后端获取公共参数RequestId(由前端每次请求生成并且保证唯一),检查服务器缓存中是否已经存在此RequestId,如果已经存在,证明是重放请求,直接返回前端,否则将此RequestId缓存起来,5分钟失效,继续下一步。

12、 后端将FieldVals按照规则分解成一个一个的参数放入httpRequestWapper。

13、 后端执行业务处理逻辑。

14、 后端对业务处理返回的结果对象进行遍历,进行XSS脚本过滤处理。

15、 后端获取结果对象中的data部分,并转换为json字符串,然后用AES密钥进行加密得到EncodeFieldVals,把EncodeFieldVals设置到结果对象中,同时清空data。(后端应该支持根据URL配置或参数名字过滤两种加密策略)

16、 后端返回前端结果对象。

17、 前端拿到结果对象,获取EncodeFieldVals部分,用AES密钥进行解密,得到json字符串,然后转换成json数据对象,接下来做后续处理。

说明:

1、 ENCODE_KEY,登陆区外需要敏感信息加密的接口必传,登陆区内接口不需要传,因为登陆时已保存在会话中,登陆区内可共享。

2、 敏感信息加解密、防重放,不是所有接口都做,可以通过配置对某些接口生效。

敏感信息加密支持对包含某些字段的报文进行自动加密。

前端负责对上送给后端的敏感信息进行加密,对后端返回来的敏感信息进行解密。

后端负责对前端上送的敏感信息进行解密,对返回给前端的敏感信息进行加密。

3、  增加ClientType公共字段,传值为H5  用来区分native, h5, pc

4、  公共参数设备号之类的

5、  请参照native公共参数的传递方式,把公共参数放在URL之后传递。

FieldVals,EncodeFieldVals业务参数需要post过来。

一种h5前端和服务端通信的安全方案相关推荐

  1. 前端3DOM编程3——Ajax和服务端通信

    1.通信基础    2.HTTP协议    3.Ajax    4.cookie 六.Ajax和服务端通信 1.通信基础 (1)Web服务器搭建 服务器是一台24h不断电.不关机,提供某种服务(文件. ...

  2. 浅议C#客户端和服务端通信的几种方法:Rest和GRPC和其他

    本文来自:https://michaelscodingspot.com/rest-vs-grpc-for-asp-net/ 浅议C#客户端和服务端通信的几种方法:Rest和GRPC 在C#客户端和C# ...

  3. c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...

    一.前言 RPC,远程过程调用,调用远程方法像调用本地方法一样.RPC交互分为客户端和服务端,客户端调用服务端方法,服务端接收数据并打印到控制台,并response响应给客户端. RPC和HTTP的联 ...

  4. 微信开发接口调用(前端+.net服务端)

    微信接口开发,包含服务端(采用.net),前端js//服务端 namespace EatWorld {public partial class Default : System.Web.UI.Page ...

  5. socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例

    本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...

  6. 警察与小偷的实现之中的一个client与服务端通信

    警察与小偷的实现之中的一个client与服务端通信 来源于ISCC 2012 破解关第四题 目的是通过逆向police.实现一个thief,可以与police进行通信 实际上就是一个RSA加密通信的样 ...

  7. Unity导出的WebGL、网页前端、服务端以及硬件四级交互结构的实现(简单3d建模网页端物联网)

    本文代码基于一个智慧楼宇项目: 前提:(Unity应该使用尽量最新的版本,2020年的应该就行,2019年的未知',2018年的好像就不行了) 模式简介: 1.服务端处理楼宇发送的信息,把处理过的信息 ...

  8. 前端渲染服务端渲染总结

    今天被问到什么是前端和服务端渲染,回答的很不好,下面总结一下: 什么是服务器端渲染和客户端渲染? 互联网早期,用户使用浏览器浏览的都是一些没有复杂逻辑的.简单的页面,这些页面都是在后端将html拼接好 ...

  9. app测试、h5测试、服务端测试区别

    (存放位置)1.h5页面放在服务端,网速慢的时候,页面出来的就慢,app的页面都是本地写出来的.可以用弱网测试看出一些区别来.(访问机制)2.h5的页面都是访问url,app都是本地写出来的页面,不需 ...

最新文章

  1. LeetCode 829. Consecutive Numbers Sum--笔试题--C++解法
  2. iOS逆向之iOSOpenDev
  3. 理解Java对象序列化
  4. 解决远程登陆Linux误按ctrl+s锁屏
  5. asp文件上传和下载
  6. C#最佳工具集合:IDE、分析、自动化工具等
  7. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
  8. cuda Synchronization Functions
  9. Educational Codeforces Round 51 (Rated for Div. 2) The Shortest Statement
  10. 使用VirtualBox在Ubuntu下虚拟Windows XP共享文件夹设置方法(亲测)
  11. 度分秒与度数相互转换的Matlab函数
  12. mysql设计一个网上购物系统_网上购物系统的设计与实现(MyEclipse,MySQL)
  13. 加壳、脱壳以及如何病毒免杀技术与原理
  14. win10动态桌面软件
  15. 最小二乘法曲线拟合+C代码
  16. python 赚钱 小项目_用Python赚钱的5个方法,教你业余时间月赚几千外快
  17. 360WiFi2怎么在linux下使用,360随身wifi2怎么用 360随身wifi2使用方法【图文】
  18. 基于Redis实现在线游戏积分排行榜!体验一下云服务器!
  19. 虚拟机——csol检测非法进程
  20. Django学习笔记(下)

热门文章

  1. 大数据、趋势与黑天鹅
  2. 如何进行生产环境作业监控
  3. [原创]C#里的狸猫换太子ref,out
  4. [已解决] ‘strncpy‘ output truncated before terminating nul copying?bytes from a string of the same leng
  5. hp服务器性能测试,较新架构服务器用CPU性能对比测试
  6. linux单机游戏存放目录,Linux安装RocketMQ单机版教程
  7. SAP FI 应收应付账龄分析-功能研究
  8. 云计算、Web2.0、SOA、SaaS、SNS到底是不是笑话?
  9. python pie函数_matplotlib 知识点11:绘制饼图(pie 函数精讲)
  10. 一张图,了解网站SEO方案