php - 如何防止服务器端从非预期来源接收数据

标签 php security

我有一个名为 addItem 的 PHP 服务。
当有人在客户端提交表单时调用此服务。

我如何确保只有在从预期表单调用时才会添加项目?
例如,试图阻止某人通过自动 curl 调用提交内容。

谢谢你,
三通

最佳答案

简短的回答是你不能。只要表单可访问,您用于保护表单的任何方法都可以自动处理。您永远不应指望用户发送的数据是安全的。但是,您可以采取一些措施来让任何想要欺骗您的表单的人都变得更具挑战性。

  • 添加 CAPTCHA这可能会过滤掉几乎所有脚本提交,但也会对普通用户产生最大的负面影响。
  • 采用某种形式的 CSRF保护(无论如何你都应该拥有)。这意味着任何想要通过表单提交数据的人都必须先申请该表单。如果此表单只能在登录墙后访问,这将使事情变得非常具有挑战性。
  • 如果您已经要求您的用户拥有 Javascript,请在​​设置 CSRF 保护 key 时尝试使用 JS。这意味着必须解析或执行 JS 才能提交有效表单。
  • 过滤常见的用户代理,例如 cURL 和 wget。
  • 检查表单是通过 POST 而不是 GET 发送的。
  • 在服务器上添加速率限制以将提交限制在合理的水平。
  • 检查 HTTP 引荐来源网址。很容易被伪造,但又要绕过一圈。

最终,如果有人想通过其他方式向您的表单提交数据,这仍然是可能的。上述步骤可能会使其更具挑战性,但用户可以执行的任何操作始终可以编写脚本,因此请确保在服务器端进行适当的验证。

关于php - 如何防止服务器端从非预期来源接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553609/

相关文章:

php - MySQL 插入并进行多重检查

php - cURL 请求挂起浏览器并继续在 Cpanel 上等待

security - 金丝雀是否可以防止返回到 libc 和面向返回的编程攻击?

security - 使用某些应用程序,即使在防火墙或 NAT 之后,数据包如何出去?

php - 如何判断MySQL事务成功

php - Symfony2 表单组件 - 违反 MVC 和 SRP?

android - 解析保存游戏高分安全

Django auth-app 密码屏蔽 - 有什么方法可以关闭吗?

php - 进行 URL 重写

android - 如何在平行空间中停止我的应用程序?