前后端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、  公共参数见《F标准化接口_公共约定文档_V1.1.0_20161222.xlsx》

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

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

 


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信