做一个APP项目 ,接口用C#输出JSON,BOSS要求安全性要高,技术经理给了个解决方案:
APP客户端每调用我的C#接口都会传一个KEY进来,KEY=MD5(时间戳),在C#接口端验证这个KEY,只要误差在30秒内的都是正确的请求,
这样的话我在C#这边是不是从接口被调用的时间开始,前15秒和后15秒,每秒都算一次MD5(时间戳),然后再与客户端传进来的KEY比较,只要有一个是相同的,那就是验证通过了,如果没有一个KEY是相同的,那就是接口请求失败!!!
这个思路对不对?有没有更简单的方法 ?
谈谈我的理解.
参数拼接+Key然后生成md5(也就是签名).
最终提交给服务器的是 参数+timestamp时间戳+key+md5签名.
服务器再把除了md5签名的数据加密得到另一个签名,比对两个签名是否正确,以判断参数是否被篡改.
如果没被篡改,请往下看.
得到参数中的时间戳,判断此时间和服务器时间的差,如果大于比如5分钟,服务器可以认定此请求过期,不予处理.
安全性:每次请求都校验签名,防止数据被篡改;时间戳判断请求是否过期;每次请求都有新的时间戳,保证一个url只能用一次等等...
希望你满意.
明白了。。我想死了。。脑筋转不过来。。只想着只传一个MD5(时间戳)到后台比较,没有想到可以传MD5(时间戳)+时间戳 到后台。。。。晕。。。很满意这个答案。。。
@牛腩: 再安全的就是每个APP注册的用户分配一个随机key.不要所有用户都用一个Key.
如果你做过支付宝或者微信支付相关的开发,看了它们的设计,理解会更到位.
@牛腩: 加密方法人家知道是md5了,还明码传时间戳,你逗谁呢,绕了一圈随便模仿。
还不如说时间戳加这个家伙的独有id合起来md5呢,这样难猜是什么加密方法;或是自己实现一套加密解密方法。
你始终就没搞明白
@arg: 刚刚想到其实也就是和支付宝支付时传的东西一样啊。。支付宝还不是传时间CUO和MD5后的签名,我想支付宝服务器那边的验证不知道也是不是那样验证。。。
时间戳这个也太短了吧,网络一延迟就过了。取1,2,3,4,5分钟靠谱。取上一分钟的时间,抹掉秒豪秒
那始终还是要FOR循环一个一个MD5了后比较了?
这种技术经理.我只能说呵呵..实在看不出来这种东西对安全性有什么帮助
还"只要误差在30秒内的都是正确的请求" 哈希第一要素:不能逆运算.你前后60秒全md5然后一个一个对比?
如果说用https或者直接自己做ssl通讯.或者自己做加密通道.都算提高安全性.
这种是真不明白什么叫安全的
是不明白,小公司 ,我一人负责技术经理+撸码员+美工+部署人员+服务器维护人员,我只想知道除了FOR循环比较 外还有什么 更好的验证方式没?
呃。。说白了就是做出的APP别人抓包可以得到取新闻列表的地址是http://aaa.com/getnewlist.aspx,
我就想防止别人直接在浏览器中输入http://aaa.com/getnewlist.aspx也可以得到我的新闻列表。。。
我想到的除了加KEY验证以外没有想到其他方法了。。
@牛腩: 所有接口都要求用户登录就吧.比较靠谱.因为这种东西是做不到的.只能说挡挡那些做测试的.正要用你这个做事情的.是一定能请求到的.按你这种方式.