我正在尝试阻止机器人客户端。
表单提交给支付提供商,支付提供商将请求响应发回我们的服务器。
我在页面中添加了一个验证码,该按钮可以在完成后提交表单。显然,这根本没有帮助,因为简单地调用 document.forms[0].submit();
就可以解决这个问题。
鉴于我只能在客户端工作,我所说的没有办法防止有针对性的攻击是否正确?
检查员可以看到任何 JavaScript 技巧。我猜我需要切换到支付提供商并让它成为他们的问题?
我还想在抄送字段中禁用粘贴,但 FF 可以覆盖它,此外,考虑到表单提交详细信息很容易看到,机器人很可能只是创建一个帖子字符串并将其提交给支付提供商。
最佳答案
有几种方法可以解决这个问题。
首先,假设支付提供商仍然传递原始表单信息,您仍然可以实现或多或少典型的验证码挑战。具有无效验证码响应的机器人仍然可以将其发送给支付提供商,但一旦该响应发送给您,您就可以检测并拒绝该响应。
其次,考虑“工作量证明”机制。使用一些 JavaScript 来执行需要一些时间才能完成的繁忙计算。对于人类访问者来说,这项工作只会在他们填写表单时在后台完成,但对于进行高速、大容量交互的机器人来说,这是一个真正的问题。这对阻止机器人没有任何作用,但有时是一种有效的威慑。
但最有效的是,为什么您的表单需要直接提交给支付提供商?您不能提交到您自己的服务器端代码来处理验证码,然后从那里提交或重定向到支付提供商吗? (我过去曾将这种架构与奇怪的支付系统一起使用,但没有一个遇到任何问题。)
关于javascript - 防止机器人提交到外部服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51634846/