为了账号安全,请及时绑定邮箱和手机立即绑定

sign 签名在客户端怎么保证安全(ios,android,web)

sign 签名在客户端怎么保证安全(ios,android,web)

倚天杖 2019-05-12 12:16:30
S=key+url_encode(path)+T签名SIGN=md5(S).to_lower(),to_lower指将字符串转换为小写;一般会这样签名API接口开发时,如果考虑到接口的安全和参数不可串改,通常做法一般是吧参数通过一定的算法签名后把签名的sign值一起发给服务端,这样服务端也根据除去sign参数,把所有参数也经过签名后,判断客服端传递的签名是否匹配。这样就解决了,但是有个问题,签名算法基本都一样,能做的就是签名时加上一个key值,但是这个key值放在客户端怎么保证安全呢。比如放在web端,js代码是直接可以看得,这样肯定不安全,放在android上面貌似也不安全,因为apk是可以反编译的。有小伙伴解决过这个问题的么?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

首先要确定sign是干什么的。
sign的主要目的是保证数据的完整性,防止在网络传输的过程中篡改数据。
name=kevin
height=170
key=$$key$$
假如上面的数据签名字符串是name=kevin&height=170$$key$$签名结果是c5c05d54d25791b0551b25a482d8c2e2。这个key在客户端是可见,别人也可以轻易拿到这个参数。但是拿到这个key又有什么意义呢?
因为key是不会在网络中进行传输的,所以服务器最终生成签名的key还会是使用$$key$$,即使你修改了数据,也修改了客户端的key但是你没有修改掉服务器的key,最后服务器还会按照自己的方式生成sign。如果你修改了数据,最终也只是签名结果不一致而已。
                            
查看完整回答
反对 回复 2019-05-12
  • 静夜的TD
    静夜的TD
    只要知道key,伪装者随便修改了其他参数,生成的sign服务器也会认为合法。所以key在客户端可见是有风险的
?
暮色呼如

TA贡献1853条经验 获得超9个赞

sign里存放的都是保密信息,比如用户的id或者其它用于验证api合法性的参数接口的请求参数一般是不放在sign里的,直接明文传输用https加密通信过程就可以sign是服务端加密后传给客户端存放,在请求api时带到服务端验证身份合法性的,里面不会有接口的请求信息,这两个是要分开的
                            
查看完整回答
反对 回复 2019-05-12
  • 2 回答
  • 0 关注
  • 922 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信