我有一个名为 addItem 的 PHP 服务。
当有人在客户端提交表单时调用此服务。
我如何确保只有在从预期表单调用时才会添加项目?
例如,试图阻止某人通过自动 curl 调用提交内容。
谢谢你,
三通
最佳答案
简短的回答是你不能。只要表单可访问,您用于保护表单的任何方法都可以自动处理。您永远不应指望用户发送的数据是安全的。但是,您可以采取一些措施来让任何想要欺骗您的表单的人都变得更具挑战性。
- 添加 CAPTCHA这可能会过滤掉几乎所有脚本提交,但也会对普通用户产生最大的负面影响。
- 采用某种形式的 CSRF保护(无论如何你都应该拥有)。这意味着任何想要通过表单提交数据的人都必须先申请该表单。如果此表单只能在登录墙后访问,这将使事情变得非常具有挑战性。
- 如果您已经要求您的用户拥有 Javascript,请在设置 CSRF 保护 key 时尝试使用 JS。这意味着必须解析或执行 JS 才能提交有效表单。
- 过滤常见的用户代理,例如 cURL 和 wget。
- 检查表单是通过 POST 而不是 GET 发送的。
- 在服务器上添加速率限制以将提交限制在合理的水平。
- 检查 HTTP 引荐来源网址。很容易被伪造,但又要绕过一圈。
最终,如果有人想通过其他方式向您的表单提交数据,这仍然是可能的。上述步骤可能会使其更具挑战性,但用户可以执行的任何操作始终可以编写脚本,因此请确保在服务器端进行适当的验证。
关于php - 如何防止服务器端从非预期来源接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553609/