【问题标题】:Leanest way to prevent scripted abuse of a web app?防止脚本滥用网络应用程序的最简单方法?
【发布时间】:2012-10-09 17:59:31
【问题描述】:

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

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

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

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

处理此类情况的“行业标准”是什么?哪些方法的成本/性能折衷最少?

【问题讨论】:

    标签: python security flask spam-prevention


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          相关资源
          最近更新 更多