拒绝接口裸奔!开放API接口签名验证!
好好学java
共 2333字,需浏览 5分钟
·
2020-12-05 12:21
点击上方 好好学java ,选择 星标 公众号
重磅资讯、干货,第一时间送达
重磅资讯、干货,第一时间送达
今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招!
个人原创100W+访问量博客:点击前往,查看更多
个人原创100W+访问量博客:点击前往,查看更多
作者:Joker_Coding
来源:r6d.cn/kChH
请求身份是否合法?
请求参数是否被篡改?
请求是否唯一?
AccessKey&SecretKey (开放平台)
请求身份
防止篡改
按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA; 在stringA最后拼接上Secretkey得到字符串stringSignTemp; 对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。
重放攻击
实现
http://api.test.com/test?name=hello&home=world&work=java
生成当前时间戳timestamp=now和唯一随机字符串nonce=random 按照请求参数名的字母升序排列非空请求参数(包含AccessKey) stringA="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random";
拼接密钥SecretKey stringSignTemp="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random&SecretKey=secret";
MD5并转换为大写 sign=MD5(stringSignTemp).toUpperCase();
最终请求 http://api.test.com/test?name=hello&home=world&work=java×tamp=now&nonce=nonce&sign=sign;
Token&AppKey(APP)
Token身份验证
用户登录向服务器提供认证信息(如账号和密码),服务器验证成功后返回Token给客户端; 客户端将Token保存在本地,后续发起请求时,携带此Token; 服务器检查Token的有效性,有效则放行,无效(Token错误或过期)则拒绝。 安全隐患:Token被劫持,伪造请求和篡改参数。
Token+AppKey签名验证
实现
后续请求
和上述开放平台的客户端行为类似,把AccessKey改为token即可。
评论