拒绝接口裸奔!开放API接口签名验证!
扫描二维码
随时随地手机看文章
作者: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即可。
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
长按订阅更多精彩▼
如有收获,点个在看,诚挚感谢
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!