首页 新闻 会员 周边

C#验证APP提交过来的KEY

0
悬赏园豆:5 [已解决问题] 解决于 2016-06-21 16:25

做一个APP项目 ,接口用C#输出JSON,BOSS要求安全性要高,技术经理给了个解决方案:

APP客户端每调用我的C#接口都会传一个KEY进来,KEY=MD5(时间戳),在C#接口端验证这个KEY,只要误差在30秒内的都是正确的请求,

这样的话我在C#这边是不是从接口被调用的时间开始,前15秒和后15秒,每秒都算一次MD5(时间戳),然后再与客户端传进来的KEY比较,只要有一个是相同的,那就是验证通过了,如果没有一个KEY是相同的,那就是接口请求失败!!!

 

这个思路对不对?有没有更简单的方法 ?

牛腩的主页 牛腩 | 初学一级 | 园豆:-6
提问于:2016-06-20 17:50
< >
分享
最佳答案
0

谈谈我的理解.

参数拼接+Key然后生成md5(也就是签名).

最终提交给服务器的是 参数+timestamp时间戳+key+md5签名.

服务器再把除了md5签名的数据加密得到另一个签名,比对两个签名是否正确,以判断参数是否被篡改.

如果没被篡改,请往下看.

得到参数中的时间戳,判断此时间和服务器时间的差,如果大于比如5分钟,服务器可以认定此请求过期,不予处理.

安全性:每次请求都校验签名,防止数据被篡改;时间戳判断请求是否过期;每次请求都有新的时间戳,保证一个url只能用一次等等...

希望你满意.

收获园豆:5
ICE_Inspire | 菜鸟二级 |园豆:228 | 2016-06-21 16:12

明白了。。我想死了。。脑筋转不过来。。只想着只传一个MD5(时间戳)到后台比较,没有想到可以传MD5(时间戳)+时间戳 到后台。。。。晕。。。很满意这个答案。。。

牛腩 | 园豆:-6 (初学一级) | 2016-06-21 16:25

@牛腩: 再安全的就是每个APP注册的用户分配一个随机key.不要所有用户都用一个Key.

如果你做过支付宝或者微信支付相关的开发,看了它们的设计,理解会更到位.

ICE_Inspire | 园豆:228 (菜鸟二级) | 2016-06-21 16:29

@牛腩:  加密方法人家知道是md5了,还明码传时间戳,你逗谁呢,绕了一圈随便模仿。

还不如说时间戳加这个家伙的独有id合起来md5呢,这样难猜是什么加密方法;或是自己实现一套加密解密方法。

你始终就没搞明白

arg | 园豆:1047 (小虾三级) | 2016-06-23 20:22

@arg: 刚刚想到其实也就是和支付宝支付时传的东西一样啊。。支付宝还不是传时间CUO和MD5后的签名,我想支付宝服务器那边的验证不知道也是不是那样验证。。。

牛腩 | 园豆:-6 (初学一级) | 2016-07-01 05:50
其他回答(2)
0

时间戳这个也太短了吧,网络一延迟就过了。取1,2,3,4,5分钟靠谱。取上一分钟的时间,抹掉秒豪秒

arg | 园豆:1047 (小虾三级) | 2016-06-20 21:16

那始终还是要FOR循环一个一个MD5了后比较了?

支持(0) 反对(0) 牛腩 | 园豆:-6 (初学一级) | 2016-06-21 16:19
0

这种技术经理.我只能说呵呵..实在看不出来这种东西对安全性有什么帮助

还"只要误差在30秒内的都是正确的请求" 哈希第一要素:不能逆运算.你前后60秒全md5然后一个一个对比?

如果说用https或者直接自己做ssl通讯.或者自己做加密通道.都算提高安全性.

这种是真不明白什么叫安全的

吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-20 21:56

是不明白,小公司 ,我一人负责技术经理+撸码员+美工+部署人员+服务器维护人员,我只想知道除了FOR循环比较 外还有什么 更好的验证方式没?

呃。。说白了就是做出的APP别人抓包可以得到取新闻列表的地址是http://aaa.com/getnewlist.aspx,

我就想防止别人直接在浏览器中输入http://aaa.com/getnewlist.aspx也可以得到我的新闻列表。。。

我想到的除了加KEY验证以外没有想到其他方法了。。

支持(0) 反对(0) 牛腩 | 园豆:-6 (初学一级) | 2016-06-21 16:22

@牛腩: 所有接口都要求用户登录就吧.比较靠谱.因为这种东西是做不到的.只能说挡挡那些做测试的.正要用你这个做事情的.是一定能请求到的.按你这种方式.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-21 17:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册