最简洁的方法来防止脚本滥用Web应用程序?

时间:2012-10-09 17:59:32

标签: python security flask spam-prevention

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

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

我还想过抓住IP,如果有太多的请求是在x时间内完成的,那么长时间拒绝,但这需要像redis这样的东西才能高效运行,我希望避免付钱。

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

您应该坐下来确定应用场景中的“核心”问题究竟是什么,以及您可能的用户是谁。这将有助于您指导正确的解决方案。

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

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

我可以整天谈论这件事。从我的角度来看,你必须首先解决业务逻辑和ux概念 - 然后技术解决方案就容易多了。

答案 2 :(得分:0)

我之前使用的一个非常简单的方法是在注册表单中使用CSS隐藏其他输入(即显示:无)。大多数表单机器人将填充此字段,而人类不会(因为它不可见)。在服务器端代码中,您可以在填充输入的情况下拒绝任何POST。