在 RESTful 服务中欺骗 POST/GET 请求

信息安全 网络服务 休息 api oauth2
2021-08-19 06:29:20

我开始开发一个连接到 RESTful 服务以进行身份​​验证和数据的应用程序。用户 POST 用户名和密码到 /token 端点。成功登录后,他们会获得一个不记名令牌,然后在随后对不同受保护资源的调用中将其附加到 Authorization 标头中。

我的问题是是什么阻止用户从应用程序中截获他们的常规帖子(获取令牌),然后可能发送一堆 POST 请求(使用邮递员或提琴手之类的东西)来创建大量假帖子或文章或任何其他应用程序做。

有哪些可能的方法可以避免这种情况?服务的流量最终将通过 TLS 传输这一事实是否使这不是问题?

4个回答

我的问题是什么阻止用户从应用程序中截获他们的常规帖子(获取令牌)然后可能发送一堆 POST 请求(使用邮递员或提琴手之类的东西)来创建大量虚假帖子或文章或任何其他应用程序做。

没有什么

服务的流量最终将通过 TLS 传输这一事实是否使这不是问题?

这根本没有区别。

有哪些可能的方法可以避免这种情况?

最常见的一种是速率限制。即,如果有人以比预期高得多的级别发布帖子,则拒绝该帖子。有几种方法可以解决这个问题 - 他们最后一次发帖是什么时候,N 分钟内的滚动平均值等。如果您不希望误报导致用户丢失帖子内容,那么让他们重新进行身份验证以继续。

另一种方法是验证码。即试图让用户证明他们是人。

另一个是尝试使用垃圾邮件过滤器或 AI 检测自动生成的内容。

我的问题是是什么阻止用户从应用程序中截获他们的常规帖子

没有什么。

服务的流量最终将通过 TLS 传输这一事实是否使这不是问题?

如果您将其用于移动平台(Android/iOS),那将变得更加困难(但并非不可能)。

如果您为浏览器制作它,这不会增加太多保护。

有哪些可能的方法可以避免这种情况?

很难防止自动请求,但您可以做的一件事是速率限制。

我的问题是是什么阻止用户从应用程序中截获他们的常规帖子(获取令牌),然后可能发送一堆 POST 请求(使用邮递员或提琴手之类的东西)来创建大量假帖子或文章或任何其他应用程序做。

有哪些可能的方法可以避免这种情况?

你没有。也就是说,您无法防范这种情况- 从身份验证和授权的角度来看,这里没有发生攻击,只是完全合法的流量。

相反,问题是“如何防止用户向我的服务发送垃圾邮件?” (或类似的),这与身份验证令牌的问题完全正交用户也可以通过该应用手动发送垃圾邮件。

用户账户限速、IP地址限速、使用cookies或设备标识符将多个账户绑定在一起进行设备限速、黑名单条款、垃圾邮件启发法等都是处理垃圾邮件的常用方法。但是,无论您要阻止的实际情况是什么,这都是您应该研究的,而不是阻止用户修改客户端的内容(他们将始终能够这样做)。

您提供给客户端的令牌应该包含一个签名的过期时间,该时间将在服务器端进行验证(例如,仅限于您对您的应用程序期望的典型用户会话时间)。这不会阻止重新发布,但会限制身份验证后可以完成的期限。到期后,用户将不得不重新进行身份验证。这通常使用JSON Web Token 来实现

但是,您谈论的是合法用户的恶意滥用(除非攻击者已经破坏了合法用户的设备并且可以清楚地拦截流量) - 如果不使应用程序几乎无法使用,这种滥用很难防止,因为其他人指出(例如,通过让用户对每个请求进行身份验证)。在设备上存储凭据并默默地重新发送它们是一个很大的禁忌。