我正在运行flask / memcached,我正在寻找一种精益/高效的方法来防止自动脚本通过请求和/或过快地提交新帖子来抨击我。
我想到在会话cookie中包含'last_action'时间并检查每个请求,但无论我设置什么时间,脚本都可以设置为延迟那么久。
我还想过抓住IP,如果有太多的请求是在x时间内完成的,那么长时间拒绝,但这需要像redis这样的东西才能高效运行,我希望避免付钱。
我更喜欢基于cookie的解决方案,除非像redis这样的东西可以证明它是值得的。
处理这类情况的“行业标准”是什么?最少的成本/性能权衡取决于哪些方法?
答案 0 :(得分:4)
使用cookie无法实现此目的,因为恶意脚本可以默默地丢弃您的cookie。由于您必须支持用户首次访问的情况(意味着没有设置任何Cookie),因此只能考虑存储在客户端上的状态,无法区分真正的新用户和恶意脚本。
您需要在服务器端跟踪用户以实现目标。这可以像基于IP的过滤器一样简单,以防止同一IP快速发布。
答案 1 :(得分:2)
您应该坐下来确定应用场景中的“核心”问题究竟是什么,以及您可能的用户是谁。这将有助于您指导正确的解决方案。
根据我的经验,这个主题有很多不同的问题和解决方案 - 没有一个是“一刀切”
我可以整天谈论这件事。从我的角度来看,你必须首先解决业务逻辑和ux概念 - 然后技术解决方案就容易多了。
答案 2 :(得分:0)
我之前使用的一个非常简单的方法是在注册表单中使用CSS隐藏其他输入(即显示:无)。大多数表单机器人将填充此字段,而人类不会(因为它不可见)。在服务器端代码中,您可以在填充输入的情况下拒绝任何POST。