郑州做网站建设公司哪家好,网站建设怎么翻译,变更icp备案网站信息查询,装饰设计乙级资质接口安全问题
请求身份是否合法#xff1f;请求参数是否被篡改#xff1f;请求是否唯一#xff1f;
AppIdAppSecret
请求身份
为开发者分配AppId#xff08;开发者标识#xff0c;确保唯一#xff09;和AppSecret#xff08;用于接口加密#xff0c;确保不易被…接口安全问题
请求身份是否合法请求参数是否被篡改请求是否唯一
AppIdAppSecret
请求身份
为开发者分配AppId开发者标识确保唯一和AppSecret用于接口加密确保不易被穷举生成算法不易被猜测。
防止篡改
参数签名
按照请求参数名的字母升序排列非空请求参数包含AppId使用URL键值对的格式即key1value1key2value2…拼接成字符串stringSignTemp对stringSignTemp进行SHA256运算并将得到的字符串所有字符转换为大写得到sign值。
请求携带参数AppId和Sign只有拥有合法的身份AppId和正确的签名Sign才能放行。这样就解决了身份验证和参数篡改问题即使请求参数被劫持由于获取不到AppSecret仅作本地加密使用不参与网络传输无法伪造合法的请求。
重放攻击
虽然解决了请求参数被篡改的隐患但是还存在着重复使用请求参数伪造二次请求的隐患。 timestampnonce方案
nonce指唯一的随机字符串用来标识每个被签名的请求。通过为每个请求提供一个唯一的标识符服务器能够防止请求被多次使用记录所有用过的nonce以阻止它们被二次使用。
然而对服务器来说永久存储所有接收到的nonce的代价是非常大的。可以使用timestamp来优化nonce的存储。
假设允许客户端和服务端最多能存在15分钟的时间差同时追踪记录在服务端的nonce集合。当有新的请求进入时首先检查携带的timestamp是否在15分钟内如超出时间范围则拒绝然后查询携带的nonce如存在已有集合则拒绝。否则记录该nonce并删除集合内时间戳大于15分钟的nonce可以使用redis的expire新增nonce的同时设置它的超时失效时间为15分钟。
实现
请求接口https://api.ssf.top/validate?b13888888888a102
生成当前时间戳timestampnow()和唯一随机字符串noncerandom()生成签名SHA256(appIdtimestampnonceparamappSecret).toUpperCase()
如果是请求路径携带参数则参数名升序配列后组装成请求参数串如https://api.xxf.top/validate?b13888888888a102这里param为a13888888888b102如果是POST请求并通过body传参则param取body体的内容md5编码后统一转换为大写
最终将appId,timestamp,nonce,及签名后的sign值设置到请求头中 网关端