Back

接口的访问基本机制:安全控制-神秘的md5参数( web interface basic: how to secure your web access? md5, guid, sign )

发布时间: 2015-01-01 01:17:00

如题。 这个在目前的app开发当中非常重要。

p.s. 如何在 nginx 的层次加入对接口的访问控制。(pid? )

refer to:  http://www.tuicool.com/articles/6Vf6jm
http://www.tuicool.com/articles/jQJV3i
http://www.cnblogs.com/chengmo/archive/2010/10/18/1854755.html
http://wiki.qcloud.com/wiki/%E6%8E%A5%E5%8F%A3%E9%89%B4%E6%9D%83  (腾讯的官方wiki )

在目前的http 请求中,所有参数都能被 黑客获知。那么服务器端该如何防范黑客的小动作呢?

一般说来,需要用到 “数字签名”技术( digital signature ) . 也就是通过在客户端加密一系列的参数,来达到在服务器端进行验证的目的。

这个技术的关键在于: 需要知道,总共有三个角色参与: 客户端,服务器端,以及黑客。

黑客可以获知 客户端发起请求中的所有信息,但是不知道背后的算法。所以,只要我们掌握了某个参数的生成技术,就能够验证 某个request是来自于 正常的客户端,还是黑客了。

最牛的签名算法,我所感知的,就是中国移动充值卡。。。。

举个例子:

正常客户端: request_url?a=1&b=2&sign=9z8x7y6w

那么黑客就能知道, 呦西,这个服务器端会接收三个参数, a=1, b=2, signature=9z8x7y6w

所以,我们就要提前做个约定,让黑客无法获知 signature的生成方式,同时,又能让server端知道。

该如何做呢? signature最常见的就是 md5([a:1], [b:2], [signature: '9z8x7y6w']), 也就是把全套参数重新digit一遍。

因此,隐藏参数就出现了。  md5(request_url + hidden_value).

在 client端和server端,共同约定这个暗号,例如: secure_token = 888, 那么,在两端生成md5的方式就是:

md5([a:1], [b:2], [secure_token:888])  ,这下连signature都省略了。 

关键在于这个secure_token  是不会出现在代码里的,它仅仅存在于: client的代码,以及 server的数据库中。

所以黑客无法下手。

这个 secure_token, 也有人叫它 primary_key (私钥)。  在微信中叫 token

p.s. http request中的 私钥 跟 rsa 中的私钥,公钥 是不太一样的。 后者需要成对出现,前者自己出现就可以了。

Back