已经做了针对 IP 和手机号的 rate limit ,但是架不住多 IP 多手机号的刷,除了进一步的限制频率外有什么好办法吗?
其实我还很奇怪为什么没有用户来投诉收到垃圾短信。。
1
avichen 2015-10-15 15:13:15 +08:00
1.昨天不是有过一样的问题了嘛?见: http://www.v2ex.com/t/227899#reply25
2.估计人家手机都被轰炸得开不了机了 |
2
kendetrics 2015-10-15 15:25:58 +08:00
图形验证码
要是算法能力够变态可以前端加密,像某宝一样用 JS 加密鼠标轨迹一起发到后端来判断是不是爬虫,除非攻击者也耐着性子啃完你的加密代码然后在爬虫里模拟,这会极大增加他的攻击成本,而且还不影响用户体验 |
3
hicdn 2015-10-15 15:26:03 +08:00
淘宝短信验证码代收
|
4
paradoxs 2015-10-15 15:34:57 +08:00
只能加密。 让别人看不到借口
|
5
ihacku 2015-10-15 17:17:06 +08:00
你看看那些手机号是不是都打不通?提示号码已过期之类?
|
6
gbooks 2015-10-15 21:39:34 +08:00
加密在前端都能看到!加个急速验证类型的滑动验证可以难倒一大片了,然后加个 ip 限制
|
7
xi_lin OP |
8
xi_lin OP @kendetrics 移动端做不了这种加密吧?
|
11
kendetrics 2015-10-15 23:30:24 +08:00
@xi_lin 你可以写自己的 JS 加密规则呗, JS 移动基本也都支持的啊。。
前端加密暴露是肯定会暴露的,但只要算法够复杂,就可以让他写爬虫的成本尽可能的高。几页长没注释的加密函数算出来的 token ,要用他写爬虫的语言去重新实现,这个能要命的 APP 你可以加个&type=app 让接口和网页分开兼容,然后在程序内算个 token 附上,在服务端验证,算法不泄密的话爬虫就没法模拟请求。然后网页那边简单的加个验证码就好 |
12
crab 2015-10-15 23:35:21 +08:00
加验证码吧。
另外你说已经做了针对 IP 和手机号的 rate limit 已经做了这些了,那就不算被刷了吧。多数网站的手机接口不也都是这样吗。有的连 IP 都没限制只限制手机号码 1 天或者 1 小时内最多几次。 |
13
xi_lin OP @kendetrics 新版本 app 可以用这个加密思路做,但是老版本的 app 也得保证能用,这样的话在覆盖率足够高之前没办法启用吧?
|
15
randyzhao 2015-10-15 23:52:55 +08:00
IP 限制怎么做的, 我们是短时间频繁调用发短信接口的话就直接 ban 掉 24 小时(不管你手机号是啥
2 天就消停了. |
16
kendetrics 2015-10-16 00:01:13 +08:00
@xi_lin 老 APP 用 HTTP 头区分一下吧。。你查一下攻击者发送的请求,如果他模拟的网页操作,很可能会附加上一些浏览器特有的头便于伪装,你可以对于有多余项(比如 UA 之类的)的直接不响应,或者你客户端有什么独特的特征能区分出来更好。。新客户端和网页端全部加密,把老版本留出来作为类似白名单的的存在。
他不一定能想到在你网页开始加密之后,还能抓老手机端的包来模拟,就算下载了客户端,如果下的是新版的会发现还是加密了的。然后你等旧版用户量少到一个程度,就强制他们迁移新版。 当然最坏的打算是这货真又去抓了旧版客户端的包,然后你又不能承受这样下去的损失,那就只能强制旧版用户迁移了。 。。你要连在登陆失败的时候显示一个“请升级最新版”的接口都没留,那就是真的 GG 了 |
17
avichen 2015-10-16 11:22:56 +08:00
@xi_lin 加验证码和哪个应用在用接口没关系的呀,你在调用接口的 UI 之前加一步先输入页面验证码,通过后再调用短信接口发送短信
|
18
xi_lin OP @randyzhao IP 限制放的比较宽,现在的限制是手机号和 IP 作为 KEY 同时到达一定次数后才 ban 掉 24 小时。 IP 如果限的太小的话像公司里所有人用同一个出口 IP 不是很快就到达上限了么?
|
19
xi_lin OP @kendetrics 我感觉抓旧版的包还是很可能发生的。。不过加密是个好思路,后续打算试试。
有预留一个弹出信息接口~ |