首页新闻找找看学习计划

关于服务端识别客户端,然后对其进行服务

0
悬赏园豆:40 [已解决问题] 解决于 2012-12-15 13:29

想做一个类似水果忍者的游戏,客户端结束游戏后会将分数发送到服务器并发送请求排行之类的命令,服务器识别并将排行数据发送给客户端。而服务器必须要能正确识别是自己的客户端,防止别人非法构造请求获取服务器数据。(当然通信内容不止是这些,所以必须要正确验证是自己客户端发送的请求)

刚开始是打算用OAuth2.0,但是那个要首先用户先注册。

对于一个已经登陆的用户来说,服务器如何进行身份识别呢?不考虑存在session或者cookie的情况。如果客户端每次请求都发送用户名密码,可能不太安全,同时服务器也必须每次都对其进行验证。 
或者用户登陆后服务器生成一个token发给客户端,客户端每次请求携带用户id和token,服务器检验id和token是否对应从而进行身份认证,但这样似乎又不安全,只要知道id和token后就可以构造然后和服务器进行通信了。 
还想到一点,仿照oauth原理,在用户注册时生成(user_token, user_secret),用户登陆时生成(user_login_token, user_login_secret),发送请求时携带两个token和用两个secret的签名,服务器验证此签名进行身份验证。因为secret是保存在客户端的,不会在网络传输,要想伪造必须同时拿到两个secret和两个token才行,而且user_login_token和user_login_secret设定过期限制,一定程度上保证安全性。

但是,一个小游戏又要求用户去注册,感觉多麻烦,用户也不会去用这个功能。希望各位大牛能有很好的识别方法,望不吝赐教。。

< >
分享
最佳答案
0

要预防请求重放攻击,目前简单有效的方式就是使用时间戳和随机字符串标识。由于使用了时间戳,客户端和服务器端需要事先协商好最大时间差。那么只要在此时检差内,重放的请求会被忽略掉。

你可以简单的将时间戳和随机字符串使用一个固定会通过协商得到的KEY来签名和加密,这样通过HTTP明文传输的TOKEN就无法被破解和篡改,攻击者只能完整的重新发送此TOKEN,由于采用了时间戳策略,服务器总是会收到正确的由客户端发送的信息。

在你的应用中,你需要把你上传的信息也加密和签名后上传。根据你的商业价值和实施成本,在初期你可以考虑使用对称加密算法来实现。

收获园豆:40
Launcher | 高人七级 |园豆:45040 | 2012-12-13 15:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册