微信小游戏 API 接口开发安全问题怎么处理?

2016-08-24 10:36:54 +08:00
 xiaoduoduoduo
前两天做的微信小游戏项目。被人一次性用几千个微信号刷走了红包。想问怎么尽量避免这样的问题。之前用的是 MD5 拼接字符串再 MD5 做的验证。已被破解。
4386 次点击
所在节点    微信
56 条回复
zhaoxiting1997
2016-08-24 10:40:22 +08:00
ip 限制,验证码。。。
有几千个能领红包的活跃号也是大牛了。。。
fjzjk
2016-08-24 10:45:13 +08:00
也就只能 ip 限制、验证码之类的了。你去赚客吧看看人家怕什么你就弄什么
xiaoduoduoduo
2016-08-24 10:55:54 +08:00
ip 限制的话,同一个路由下的 ip 都是一样。这个怎么解决?验证码的话是实行短信验证还是什么验证?
xiaoduoduoduo
2016-08-24 10:59:48 +08:00
@fjzjk 瞄了一下赚客吧。感觉就是用爬虫拿到网上的各种活动信息
xiaoduoduoduo
2016-08-24 11:00:48 +08:00
@zhaoxiting1997 感觉怎么都不好做。前端用的是 JS ,什么都暴露出来了。那天一开始统计有刷掉了几千个红包,只有 120 个 IP ,也是醉了
Wy4q3489O1z996QO
2016-08-24 11:06:24 +08:00
后台默默限制一个微信号只能拿 1 个红包呗,能有耐心用几千个微信号来刷的其他手段对他们来说意义也不太大吧。
再不行就微信号、 IP 、验证码限制逐级上,记住所有限制不要在界面明确显示 只要不给红包就好了
xiaoduoduoduo
2016-08-24 11:11:00 +08:00
@romotc 这个在商户已经设置一个微信号每天只能领取一个,代码里面限制只能领取一个。真心是用几千个微信号刷走红包的。全部绕开了游戏接口,直接调用红包接口。验证码怎么去验证呢?
lavande
2016-08-24 11:11:20 +08:00
这算是 sybil 攻击吧,解决方法,说宽泛一点就是:增加伪造身份的成本
justfindu
2016-08-24 11:12:47 +08:00
实名制呀~ 微信红包发出去的时候有一个 check_name 设置强制 check, 然后需要微信用户输入名字就可以了
Wy4q3489O1z996QO
2016-08-24 11:13:53 +08:00
@xiaoduoduoduo 红包接口中增加游戏相关验证呗
“ MD5 拼接字符串再 MD5 ”是什么鬼?
xiaoduoduoduo
2016-08-24 11:18:25 +08:00
@lavande 那这个就是属于伪造身份+非同时攻击咯
xiaoduoduoduo
2016-08-24 11:21:52 +08:00
@romotc
//时间判断
if($type == 'test'){
$huidiao = time();
$_SESSION['huidiao'] = $huidiao;
showsuc('test',array('code'=>md5($huidiao)));
}

if(in_array($type,array('接口名称'))){
if(md5(md5($_SESSION['huidiao']).$_REQUEST['score']) != $_REQUEST['code']){
showsuc('请求成功');
}else{
$_SESSION['huidiao'] = null;
}
}
xiaoduoduoduo
2016-08-24 11:34:10 +08:00
@lavande 但也不对呀。微信红包是发送到对应的 openid 的,伪造的身份怎么接收红包呀?
changwei
2016-08-24 11:36:24 +08:00
接入复杂验证码,进行分级审查作弊用户,比如说如果复杂验证码仍然承受不了攻击,那么对这个 IP 段实施更高等级的验证,比如说手机验证码,语音验证码, GIF 动态验证码等等,增大作弊成本也不会影响普通真实用户体验。
williamx
2016-08-24 11:38:30 +08:00
这种问题都是从策划上去想办法解决的
lavande
2016-08-24 12:15:51 +08:00
@xiaoduoduoduo 我刚刚说的可能有点问题, sybil 攻击是指在 P2P 网络中发生的……不过我的意思就是,这些“小号”既是合法的身份又是非法的,合法是因为它确实是微信的系统里承认的合法用户,非法是因为它们背后是同一个人在操作,用于非法目的,所以就是想方法让这个人在操纵这些小号去攻击你的时候要花费巨大的成本
xiaoyangsa
2016-08-24 12:50:03 +08:00
@xiaoduoduoduo 游戏完成以后加标注,然后才能领红包啊,要不不给领嘛
leehon
2016-08-24 13:16:33 +08:00
现在微信检查的比较严格,即使刷到了红包,要集中并提现也不容易
alex321
2016-08-24 13:37:59 +08:00
游戏进行完成之后才可以领红包是必须的前置条件啊,可以是程序自行承接或者发出一个红包口令啥的。
每次都走 OAuth 过一遍,针对 openId/unionId 再次通过微信 api 在服务端检查是否保持关注状态,然后针对所有新 openId/unionId 低概率发红包。
这些是对用户透明无感知的,说到有感知的,直接手机号码短信验证,同一手机号码只允许领一次,都发红包了,不在乎这 0.045 的钱吧。
xiaoduoduoduo
2016-08-24 13:55:25 +08:00
@changwei 这个上午又考虑过,在想接下来的项目是不是全部把接口名使用加密后的字符串,发红包的时候做验证比较麻烦

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

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

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

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

© 2021 V2EX