一个类似于 WebQQ 的在线聊天工具,因为数据传输接口通过抓包很容易被发现,担心别有用心的人找到数据传输的接口了后,不停 post 信息,我初步构想是,用户在 1 分钟内发布了 30 条信息,则弹出验证码,但是苦思冥想很久不知道这种应该怎么实现,用 cookie 保存用户发信息的时间戳然后后端计算平均值?这方法很容易被破解,用 MySQL 保存发信时间?这个数据库会很庞大,求 V 友有没有好点解决方案?不胜感激
1
naver1 Jan 27, 2016
很奇怪在线聊天工具不记录发信时间。。。
|
2
JulyXing Jan 27, 2016
我的思路是在数据表中通过发信时间来比较前后时间,如果防止别人恶意请求接口可以在服务器设置。
|
3
virusdefender Jan 27, 2016
|
4
sherlocktheplant Jan 27, 2016
根据 IP 和用户 ID 分别记录每次发送消息的时间
收到发送消息的请求时计算 1 分钟内发消息的次数 如果 IP 或者用户 id 任意一个键对应的次数超过 30 就返回发送失败 并要求验证码 然后同样的前端也做套频率限制 到了 30 就去取验证码 |
5
odirus Jan 27, 2016
选择正确的工具,推荐 redis+lua 脚本实现, redis 中 expire + incr 都是现成的, lua 使用正确的话能够保证原子性操作。
|
6
sherlocktheplant Jan 27, 2016
@odirus 对 这个用 redis 做很方便
不过如果服务规模不大 单台服务器的话 自己用个线程安全的 hashmap 也可以 部署比较省事 |
7
g5tf87 Jan 27, 2016
3 楼正解, 令牌桶算法是网络限流的经典算法,RFC 推荐.
|
8
vuuv Jan 27, 2016 via Android
确保每秒钟只能发送一条消息即可。还可以简化数据库里的时间粒度。
|
9
firefox12 Jan 27, 2016 via iPhone
服务器端不保留用户信息吗?
|