一种h5前端和服务端通信的安全方案
前后端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前端和服务端通信的安全方案相关推荐
- 前端3DOM编程3——Ajax和服务端通信
1.通信基础 2.HTTP协议 3.Ajax 4.cookie 六.Ajax和服务端通信 1.通信基础 (1)Web服务器搭建 服务器是一台24h不断电.不关机,提供某种服务(文件. ...
- 浅议C#客户端和服务端通信的几种方法:Rest和GRPC和其他
本文来自:https://michaelscodingspot.com/rest-vs-grpc-for-asp-net/ 浅议C#客户端和服务端通信的几种方法:Rest和GRPC 在C#客户端和C# ...
- c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...
一.前言 RPC,远程过程调用,调用远程方法像调用本地方法一样.RPC交互分为客户端和服务端,客户端调用服务端方法,服务端接收数据并打印到控制台,并response响应给客户端. RPC和HTTP的联 ...
- 微信开发接口调用(前端+.net服务端)
微信接口开发,包含服务端(采用.net),前端js//服务端 namespace EatWorld {public partial class Default : System.Web.UI.Page ...
- socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例
本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...
- 警察与小偷的实现之中的一个client与服务端通信
警察与小偷的实现之中的一个client与服务端通信 来源于ISCC 2012 破解关第四题 目的是通过逆向police.实现一个thief,可以与police进行通信 实际上就是一个RSA加密通信的样 ...
- Unity导出的WebGL、网页前端、服务端以及硬件四级交互结构的实现(简单3d建模网页端物联网)
本文代码基于一个智慧楼宇项目: 前提:(Unity应该使用尽量最新的版本,2020年的应该就行,2019年的未知',2018年的好像就不行了) 模式简介: 1.服务端处理楼宇发送的信息,把处理过的信息 ...
- 前端渲染服务端渲染总结
今天被问到什么是前端和服务端渲染,回答的很不好,下面总结一下: 什么是服务器端渲染和客户端渲染? 互联网早期,用户使用浏览器浏览的都是一些没有复杂逻辑的.简单的页面,这些页面都是在后端将html拼接好 ...
- app测试、h5测试、服务端测试区别
(存放位置)1.h5页面放在服务端,网速慢的时候,页面出来的就慢,app的页面都是本地写出来的.可以用弱网测试看出一些区别来.(访问机制)2.h5的页面都是访问url,app都是本地写出来的页面,不需 ...
最新文章
- LeetCode 829. Consecutive Numbers Sum--笔试题--C++解法
- iOS逆向之iOSOpenDev
- 理解Java对象序列化
- 解决远程登陆Linux误按ctrl+s锁屏
- asp文件上传和下载
- C#最佳工具集合:IDE、分析、自动化工具等
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
- cuda Synchronization Functions
- Educational Codeforces Round 51 (Rated for Div. 2) The Shortest Statement
- 使用VirtualBox在Ubuntu下虚拟Windows XP共享文件夹设置方法(亲测)
- 度分秒与度数相互转换的Matlab函数
- mysql设计一个网上购物系统_网上购物系统的设计与实现(MyEclipse,MySQL)
- 加壳、脱壳以及如何病毒免杀技术与原理
- win10动态桌面软件
- 最小二乘法曲线拟合+C代码
- python 赚钱 小项目_用Python赚钱的5个方法,教你业余时间月赚几千外快
- 360WiFi2怎么在linux下使用,360随身wifi2怎么用 360随身wifi2使用方法【图文】
- 基于Redis实现在线游戏积分排行榜!体验一下云服务器!
- 虚拟机——csol检测非法进程
- Django学习笔记(下)
热门文章
- 大数据、趋势与黑天鹅
- 如何进行生产环境作业监控
- [原创]C#里的狸猫换太子ref,out
- [已解决] ‘strncpy‘ output truncated before terminating nul copying?bytes from a string of the same leng
- hp服务器性能测试,较新架构服务器用CPU性能对比测试
- linux单机游戏存放目录,Linux安装RocketMQ单机版教程
- SAP FI 应收应付账龄分析-功能研究
- 云计算、Web2.0、SOA、SaaS、SNS到底是不是笑话?
- python pie函数_matplotlib 知识点11:绘制饼图(pie 函数精讲)
- 一张图,了解网站SEO方案