0

设想

我正在构建一个 node.js/socket.io(express.js、mongodb、passport.js、socket.io)网络游戏。用户必须先登录才能玩。

我正在考虑在首页上有一个大的“TRY NOW”按钮,它使用 socket.io 在 mongodb 中创建一个随机命名的访客帐户,并使用它让玩家登录游戏。除非用户注册,否则此访客帐户会在 48 小时内销毁。

滥用它的一种方法可能是编写一个脚本,该脚本反复单击“立即尝试”按钮,以用访客帐户淹没我的数据库。

问题

如果没有完整的注册,有没有办法避免这种情况?我可以在“TRY NOW”旁边放一个验证码,但除非我真的需要,否则我宁愿不使用它。

4

1 回答 1

1

有一些方法可以在没有 CAPTCHA 的情况下做到这一点,但这并不是完美的解决方案。

  1. 您可以为该客户端设置一个带有 sessionid 的 cookie,该 cookie 随时间持续存在。如果用户有会话,则此会话 ID 可能会阻止“立即尝试”按钮。这可能会被另一个不会存储您的 cookie 的浏览器绕过。或者只是当用户删除 cookie
  2. 不推荐,如果您扫描用户 IP 地址并实施洪水保护(例如,此 IP 地址可能会在 10 分钟内点击该按钮,否则会阻止它)。但这对于共享和 NAT 下是非常不愉快的。考虑不这样做
  3. 否则,您可以考虑扫描新形成的用户的活动,如果在最初几分钟内没有任何活动,则他们的帐户被销毁,应该重新创建。

几乎这些都是可能有效的想法。

于 2013-01-13T13:25:23.743 回答