我所有的控制器都有一对动作/Edit
,一个用于 GET 请求,一个用于 POST 请求。我已经在 GET 调用中添加了权限检查(授权),以确保任何不应该访问对象的人都不会进入那里。
我是否需要在方法的 POST 版本上添加相同的检查?它是多余的,还是我应该合理地期望有人欺骗 HTTP POST 请求,即使他们无权访问 GET 版本?
我所有的控制器都有一对动作/Edit
,一个用于 GET 请求,一个用于 POST 请求。我已经在 GET 调用中添加了权限检查(授权),以确保任何不应该访问对象的人都不会进入那里。
我是否需要在方法的 POST 版本上添加相同的检查?它是多余的,还是我应该合理地期望有人欺骗 HTTP POST 请求,即使他们无权访问 GET 版本?
向 URL 发送 POST 请求非常容易。如果您的站点处理敏感/秘密数据,您应该期望人们尝试各种方式来获取它,并且您应该确保所有访问点(包括 POST 请求)检查用户是否有权访问该请求。
您可能没有意识到您偶然发现了过去许多网站的主要漏洞。通常,开发人员通过 GET 请求保护对页面的访问,但未能保护 POST,因为他们不希望使用它。然而,许多 Web 框架都有默认设置来处理相同的 GET 和 POST,通过使用 GET 查询字符串或 POST 参数。如果 yoru 框架这样做并且您保留默认设置,那么您很容易受到攻击。
您可能还想知道,大多数 Web 应用程序渗透测试人员从映射应用程序开始,然后对 GET 资源发出 POST 请求,反之亦然。知道有多少黑客是以这种方式完成的,您会感到震惊。尝试向 Google 发出 POST 请求,并注意他们的服务是如何让你感到有点抓狂的。
简而言之,将相同的安全代码应用于 GET 和 POST 请求!如果 POST 永远不会发生,则完全禁用它,以便您的服务器返回错误。