4

我正在运行flask/memcached,并且正在寻找一种精简/高效的方法来防止自动脚本向我提出请求和/或过快地提交新帖子。

我曾想过在会话 cookie 中包含一个“last_action”时间并检查每个请求,但无论我设置什么时间,脚本都可以设置为延迟那么长时间。

我还想过要获取 IP,如果在 x 时间内发出了太多的请求,请再拒绝这么长时间,但这需要像 redis 这样的东西才能有效运行,我想避免为此付费.

我更喜欢基于 cookie 的解决方案,除非像 redis 这样的东西可以证明它是值得的。

处理这类情况的“行业标准”是什么?哪些方法具有最少的成本/性能权衡?

4

3 回答 3

4

使用 cookie 无法实现此目的,因为恶意脚本可以静默地删除您的 cookie。由于您必须支持用户首次访问的情况(即没有设置任何 cookie),因此仅考虑存储在客户端上的状态无法区分真正的新用户和恶意脚本。

您需要在服务器端跟踪您的用户以实现您的目标。这可以像基于 IP 的过滤器一样简单,可防止同一 IP 快速发布。

于 2012-10-09T18:26:19.897 回答
2

你应该坐下来决定在你的应用场景中你的“核心”问题到底是什么,以及你的潜在用户是谁。这将帮助您指导正确的解决方案。

根据我的经验,这个主题有很多不同的问题和解决方案——没有一个是“一刀切”的

  • 如果您对匿名用户有疑问,您可以尝试尽可能多地迁移“帐户墙”后面的功能。
  • 如果您不能使用帐户墙,那么您最好使用一些基于 IP 的跟踪以及其他一些标头/javascript 内容。由于公司代理、家庭路由器等,单独使用 IP 可能是一场灾难。您将面临太多误报的风险。如果你添加浏览器信息,讨厌的用户仍然可以伪造它——但你会惩罚更少的真实用户。
  • 您可能希望帐户墙仅用作强制执行 cookie 的一种方式,或者它可能会嵌入到拥有站点身份的想法中,其中经验可以获得特权。
  • 您可能需要一个可以映射到另一个受信任站点的帐户的帐户。例如,我通常信任与 Facebook 绑定的第 3 方帐户——他们在处理虚假帐户方面相当不错。我不相信与 Twitter 绑定的第 3 方帐户——这主要是垃圾邮件。
  • 您可能只需要网站“注册”来解决验证码,或者其他稍微不方便的东西来清除最令人讨厌的访问。但是,如果对不良行为的奖励足够高,您将无法解决任何问题。

我可以整天谈论这个。从我的角度来看,您必须首先解决业务逻辑和用户体验概念 - 然后技术解决方案要容易得多。

于 2012-10-09T18:45:42.243 回答
0

我以前使用过的一个非常简单的方法是在注册表中添加一个使用 CSS 隐藏的附加输入(即具有显示:无)。大多数表单机器人会填写此字段,而人类不会(因为它不可见)。然后,在您的服务器端代码中,您可以拒绝任何填充了输入的 POST。

于 2012-12-22T14:14:10.410 回答