我可以举手么。。其实你们两都不对
登陆完返回一个sign,这个sign在传输过程中会被网卡监听拦截或者各种拦截,一样可以被人偷去伪造请求,不能解决问题。当然比userid或者手机号要好一点,只是也不能真正解决问题。
防止伪造最低限度的验证是,客户端和服务端都持有一个字符串密钥,程序内置的,不在网络上传播,在发请求之前,用userid+时间戳+各种请求参数+密钥拼接,然后进行md5,把md5值传给服务端。服务端同样用收到的userid+本地密钥拼接,然后md5对比。
关键点就是有一个不传输的密钥参与了加密,这样才能确保即使请求被人拦截,仍然无法伪造md5,因为他不知道密钥,他最多只能再发一个一模一样的链接过来,不能修改任何请求参数比如改userid。
再严格一点就是用非对称加密,客户端持公钥,服务端持私钥,客户端加密,服务端解密,就不用再在参数上作文章了,缺点是密文比较长占流量,只在安全性要求最高的接口采用就行。
登陆完返回一个sign,这个sign在传输过程中会被网卡监听拦截或者各种拦截,一样可以被人偷去伪造请求,不能解决问题。当然比userid或者手机号要好一点,只是也不能真正解决问题。
防止伪造最低限度的验证是,客户端和服务端都持有一个字符串密钥,程序内置的,不在网络上传播,在发请求之前,用userid+时间戳+各种请求参数+密钥拼接,然后进行md5,把md5值传给服务端。服务端同样用收到的userid+本地密钥拼接,然后md5对比。
关键点就是有一个不传输的密钥参与了加密,这样才能确保即使请求被人拦截,仍然无法伪造md5,因为他不知道密钥,他最多只能再发一个一模一样的链接过来,不能修改任何请求参数比如改userid。
再严格一点就是用非对称加密,客户端持公钥,服务端持私钥,客户端加密,服务端解密,就不用再在参数上作文章了,缺点是密文比较长占流量,只在安全性要求最高的接口采用就行。