有没有什么思路可以防止伪造请求

2015-04-17 15:32:02 +08:00
 whatisnew

为了防止伪造请求,想了各种办法,唉。。。
像服务器端拿到 uuid 之后怎么验证这个 uuid 是正确的呢?
比如有没有一个什么标准数据库可以检查 uuid 是正确的。

或者有别的什么思路可以解决伪造请求的问题。。。像微信这种是怎么做的呢

5241 次点击
所在节点    iOS
43 条回复
whatisnew
2015-04-17 16:50:14 +08:00
@xenme 像微信这种你怎么增加单位时间限制。。。只能从实名认证注册入手。
然后,保护登录后的 token+key 也是很头疼的,他人肉注册一个抓包把 key+token 拿出来就可以了。
whatisnew
2015-04-17 16:51:43 +08:00
@whosesmile 比如在线金融-基金类的业务。当然实名,当然绑手机,但是这还不够。。。
11
2015-04-17 16:54:01 +08:00
@whatisnew HTTPS 怎么抓包?难道他们替换了 CA?
whatisnew
2015-04-17 16:57:21 +08:00
@11 问题不在 https 那些 token+key 你得存到本地吧。存本地另外再加密也不行。。。
whosesmile
2015-04-17 16:58:31 +08:00
@11 楼主的意思貌似是说不是中间人劫持,而是用户故意分析自己的数据,然后去伪造人工行为发送数据,举例就是通过浏览器插件来分析html代码之后,购买火车票的方法是没法避免的。
whatisnew
2015-04-17 17:00:11 +08:00
@11 从日志分析情况来看,我怀疑 https 也被破了,不知道他们是怎么做到的。现在只能是有异常的账号先锁定再人肉解决。
whosesmile
2015-04-17 17:01:17 +08:00
我自己感觉也是无解,这就是游戏外挂,所有数据都合法,能想到的也是通过用户行为分析了。
whatisnew
2015-04-17 17:02:03 +08:00
@whosesmile 两种情况都是避免
11
2015-04-17 17:05:27 +08:00
@whosesmile 了解了。。自己理解错了。。
whatisnew
2015-04-17 17:05:49 +08:00
特别是 android 机,java 太烂了!反编译也太容易了。。。
whosesmile
2015-04-17 17:06:46 +08:00
@whatisnew 微信获取access_token的时效性是2小时,他要求服务器端做分发机缓存这个token,如果不做缓存,每次都访问微信服务器,它是有次数限制的,会拒绝访问的。从这个角度出发,其实你也可以评估一个合理的上限,然后拒绝服务,不过毕竟微信只提供认证,它没有具体业务,因此比较容易,至于其他的新版的SDK也都有上限限制的。
justfly
2015-04-17 17:10:10 +08:00
如果你有客户端的话 使用rsa 客户端保存私钥 保证不泄漏 根据整个请求做签名 时间戳参与签名 服务端用公钥校验签名 同时对完全相同的签名拒绝访问 使用https 防止中间人
whatisnew
2015-04-17 17:13:27 +08:00
@justfly 客户端任何信息都不可信。 rsa 同样也要保存在客户端。同时认证太慢。不如 key+token
knightlhs
2015-04-17 17:32:51 +08:00
你这个不是解决的思路
如果客户端可以信任 那就加密通信数据
如果客户端不可疑信任那……他怎么样都能拿到一个 token 实在不行我注册一个真用户总可以了吧
其次 你需要判断用户的行为 1秒钟看了10次列表肯定不正常 没完没了的刷列表也不正常
你可以给一个行为特征判断 一旦满足 就封禁一段时间 靠数据加密是不可能的
cdffh
2015-04-17 18:14:15 +08:00
http协议本来就是无状态的。所以你让http做这个事情太难了。建议你开一个websocket 定时服务器端下发随机的密钥,然后前端使用密钥来做一些请求。可以一定程度上防止。
pi1ot
2015-04-17 18:57:03 +08:00
@whatisnew 支付是有身份信息的。
RIcter
2015-04-17 19:38:26 +08:00
沒法防⋯真心的qwq
mucid
2015-04-17 22:31:04 +08:00
@whosesmile 没啥用,你比如tornado,只要取出cookie的xrsf照样可以伪造……
fredcc
2015-04-17 23:25:01 +08:00
2个部分吧
1、验证客户端的合法性(比如说google的二步验证、短信验证码等等
2、保证合法客户端的会话安全(这里https啊、证书验证啊之类之类咯
kukat
2015-04-18 00:11:31 +08:00
服务端和客户端都保存一份token,客户端一定不要明文保存最好混淆一下。
对每次请求签名 signature = md5(URL_PATH+QueryString+Timestamp+token)
请求参数里加上timestamp=xxx&signature=yyy
服务端收到请求检查 timestamp 是否在有效期内
计算签名 signature = md5(URL_PATH+QueryString+Timestamp+token)
判断签名是否匹配

基本能防住包括 repeat attack 在内的恶意请求了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX