前端有一个调用发送验证码的网页,估计被哪个别人有心的人恶意调用了,现在数据库不断在 insert 数据验证码的记录,有一个手机号多达 800 多次。目前已经限制每个手机号 5 分钟内只能发 5 条,但是对方换了策略,发了 N 多个手机号,天啊!求对策!
场景是这样的:有一个注册页面,需要输入手机号,然后会有个获取验证码,验证码正确才能注册。
恶意攻击的人找到了发送验证码这个地址,如: send_msg.php ,然后恶意调用了 N 次, CSRF 应该不是针对这个问题的。
解决办法想到 2 种:
1
yinxingren 2016-02-19 12:21:19 +08:00 via iPhone
验证码~
|
2
lshero 2016-02-19 12:21:29 +08:00
加图验
|
3
htfy96 2016-02-19 12:22:31 +08:00
限制每个 ip 5 分钟只能发 5 条, 30 分钟只能发 10 条, 2 小时内只能发 15 条?
|
4
wclebb 2016-02-19 12:23:38 +08:00
这是用来「呼死你」短信,为达到让对方手机无法正常使用通信的目的。
|
5
wclebb 2016-02-19 12:24:25 +08:00
你不说你网站是干嘛的。。。
|
6
feiyuanqiu 2016-02-19 12:26:00 +08:00
把验证码放 redis 或缓存里?
|
7
bjrjk 2016-02-19 12:28:44 +08:00 via Android
你限制每个 IP 每分钟只能发 1 条,不管是那个手机号都只能一条不就完了
|
8
daniellu 2016-02-19 12:31:25 +08:00
CSRF 验证?
|
9
lijinma 2016-02-19 12:35:31 +08:00
我也遇到过,几个方法:
1. 最通用的方法,就是在前端加 验证码来限制。 2. 限制 ip ,使用 fail2ban 来监控 nginx 日志,然后限制 ip 建议你使用方法 1 ,不要图简单。 |
10
500miles 2016-02-19 12:36:44 +08:00
验证码被识别了? 还是压根儿没有图形验证码?
|
11
jarlyyn 2016-02-19 12:43:53 +08:00
加验证
401 页面加 cookie,nginx 判断 cookie 反代,定时修改。 动态 js 生成验证码,类似 crsf 。 之前客户遇到过,我能想到的办法就这些。 |
12
jarlyyn 2016-02-19 12:44:39 +08:00
另外不要考虑限制 ip 和手机号码。
带不带重复的。 我怀疑是坐在应用程序里的,而非网站。 |
13
firefox12 2016-02-19 12:44:46 +08:00
图形校验码啊
|
14
skiplow 2016-02-19 12:47:19 +08:00
接口加个校验值呀!
|
15
br00k 2016-02-19 13:02:11 +08:00
放数据库作死么。。。上 redis ,加点限制就行了。随便玩。
|
16
meijing0114 2016-02-19 13:34:54 +08:00
首先校验请求有效性吧,相同的验证码可以重复提交?
其次对 ip 限频,防止被恶意调用。 再次这种数据不适合放在数据库吧,如果只是要统计一下的话。 |
17
shiny 2016-02-19 13:37:34 +08:00
好多人好像没 get 到点,发短信验证码是要钱的。
|
18
mailunion 2016-02-19 13:41:40 +08:00
你把短信验证这一步取消了不就行了!
你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! 你把短信验证这一步取消了不就行了! |
19
phpcxy 2016-02-19 13:44:29 +08:00
我用云片,他那边已经限制了 30 分钟同一个手机号只能发两条
|
20
TangMonk 2016-02-19 13:45:01 +08:00
我也遇到过,加了 csrf token 就没事了,如果还不行那就加入图形验证码
|
21
homfen 2016-02-19 13:58:26 +08:00 via iPhone
加个验证码呀,输入验证码才会发送短信,估计被利用做短信轰炸了
|
22
RangerWolf 2016-02-19 14:00:03 +08:00
目前我感觉你能做的有两个事情:
1. IP 限制 2. 修改 php 的名字~ 然后调用的代码相应的也修改 |
23
coosir 2016-02-19 14:01:25 +08:00
我们遇到的是各种不同的 IP 和不同的手机号,防不胜防
有效的办法就是加图形验证码 |
24
istark 2016-02-19 14:03:51 +08:00
短信轰炸机用了你们短信验证码,以前我看到有人先邮箱验证,收到邮件在短信验证,再限制一些其他的,这个虽然繁琐了,效果会好点。
|
25
realpg 2016-02-19 14:04:06 +08:00
不带验证码就能发短信,你们这系统设计的人是 out of date 多久了……
|
26
killerv 2016-02-19 15:11:50 +08:00
加验证码是最合适的方法吧,个人觉得限制 ip 有可能会误杀。
|
27
tonghuashuai 2016-02-19 15:15:23 +08:00
图片验证码+频率验证策略基本可以解决这个问题
|
28
zxgngl 2016-02-19 15:32:22 +08:00
说句题外话,我觉得现在随便注册什么帐号就要验证并绑定手机号本身就是一个 bug 。
|
30
aprikyblue 2016-02-19 15:42:38 +08:00
先图形验证码过了才让发短信验证
|
31
Raidal 2016-02-19 15:49:04 +08:00
先加图形验证码才允许发短信,这个策略很多短信服务商都有相关的安全提醒
|
32
Light3 2016-02-19 15:51:49 +08:00
- - 你的短信商 没有 一个小时就让发 3 个的限制吗
|
33
Srar 2016-02-19 17:36:08 +08:00
geetest
|
34
pyshift 2016-02-19 17:40:56 +08:00
我很好奇,运营商居然没有屏蔽你。不知道用得哪家的服务,一般都会直接屏蔽拉黑你才对啊。图验和 IP 监控其实只是增加难度而已,图验一般立竿见影, IP 地址搞个代理你就傻眼了。
|
35
wd0g 2016-02-19 19:36:34 +08:00
一般每个手机号,每天设置 3 次验证码就 OK 了
|
36
cmxz 2016-02-19 19:40:24 +08:00
图片验证码
|
37
sding 2016-02-19 19:44:49 +08:00 via Android
设计系统时没考虑到这种情况???加图验
|
38
KevinChan 2016-02-19 19:46:30 +08:00 via iPhone
那就用邮箱注册呗,手机验证码注册的除非必须,否则就不注册
|
39
flyingnn 2016-02-19 20:01:08 +08:00 via Android
京东,百度的注册是没有图片验证码的,是钱嗯,还是防御技术?
|
40
lutla 2016-02-19 20:03:11 +08:00
一看就是被 0gtx 那批人给利用了 233
|
41
salmon5 2016-02-19 20:22:28 +08:00
加验证码,
手机注册就手机注册呗,有些程序猿真是清高,有些场景就是需要手机验证码这种相对物理的安全验证方式。你破解我手机验证码试试?邮箱撞库安全系数没手机高。 |
42
nightv2 2016-02-19 22:23:37 +08:00 via Android
同样好奇短信提供商没有屏蔽你么?
|
43
jyu213 2016-02-19 22:24:14 +08:00
好好奇,为啥没有人提 360 的双向验证。。。
|
44
tianice 2016-02-19 22:25:51 +08:00
后台加上验证规则,像你之前的规则,超过规则后后台不发送验证码,前台还是提示发送成功,他摸不透你的规则就老实了,前台无论如何都要提示发送成功
|
45
libook 2016-02-19 22:33:54 +08:00
1 阶段:验证码
2 阶段:记录放在 Redis 缓存里 3 阶段:缓存用 IP 做 Key 4 阶段:反思一下自己得罪谁了 通常 1 阶段就够了。 |
46
gkiwi 2016-02-19 23:05:06 +08:00
难道只有我考虑的是,要浪费我好多钱么。。。
|
47
publicAdmin 2016-02-19 23:07:21 +08:00
建议:
1.如果有安全厂商的联系渠道,建议通过其获取一份手机号码黑名单过滤文件 (至于他们的数据来源,未知。猜测是通过某些策略判断为机器人操作后添加的) 2.如果需要保持足够高的安全性,且用户普遍质量偏高,建议尝试语音验证码 3.server 添加短信策略 4.安利个传说的新型验证方式.`极验` 弊端: 会误杀部分,但对刷验证码应该有一定缓解。短信商没封你的接口也算是可以了。 |
48
pabno 2016-02-19 23:16:44 +08:00
图片验证应该就够了,如果做 IP 限制,挺多地方是一片区域共用一个 IP 的,例如广州这边的城中村。
@zxgngl 估计是想要收集数据吧 |
49
leilux 2016-02-19 23:19:21 +08:00
如果是直接调用 send_msg.php 的加 csrf 可以解决
如果是靠刷注册页面来发短信的可以加图形验证码 总之 send_msg.php 这个需要有个类似 token 的参数来增加调用的代价 |
50
tairan2006 2016-02-20 00:14:38 +08:00 via iPad
加图形验证码,语音验证码,或者干脆让用户给你发短信。。
体验依次下降 |
51
bkmi 2016-02-20 00:16:08 +08:00
超过几次之后 图像验证码啊 这种强度,就算不是刷验证码 普通页面都应该封 ip 了吧
|
52
incompatible 2016-02-20 00:22:11 +08:00
@br00k 楼主的问题并不在于用数据库还是 redis 。以及这点数据量用数据库怎么就作死了?
|
53
pynix 2016-02-20 00:52:18 +08:00
笑尿
|
54
MrMario 2016-02-20 08:46:56 +08:00
可以试试阿里的滑动验证,就用户体验来说,还是可以的
|
55
wbsdty331 2016-02-20 11:32:29 +08:00
让用户给你发短信 怎么样
|
56
xlrtx 2016-02-20 11:32:37 +08:00
sms 服务应该会有每天上限的, 我做过的一个是每天同一个手机 5 条, 再加上 captcha 和 ip 限制, 就不会有问题的
|
57
tSQghkfhTtQt9mtd 2016-02-20 13:19:47 +08:00
当然你用户如果不是都会翻墙那当我没说 |
58
mrwangrj 2016-02-20 15:10:50 +08:00
|
59
h4rdy 2016-02-20 16:19:54 +08:00
给 send_msg.php 传输 post 数据。
number=1388888888&token=xxxxxx 使用 token |
60
jlj224 2016-11-30 15:04:00 +08:00
我们用的 SUBMAIL 是有每日次数限制的。而且他们有个主动防御机制,但是有部分会被误杀 http://submail.cn/
|