如何保护API端点免受垃圾邮件攻击,并报告客户端JS错误?

3

我正在使用Spring Boot和React.js SPA开发网络应用程序,但我的问题不是特定于这些库/框架的,因为我认为将客户端JS错误报告给服务器(以进行日志记录和分析)对许多现代网络应用程序来说都必须是常见的操作。

因此,假设我们有一个JS客户端应用程序捕获了一个错误,并且一个REST端点/errors接受一个包含有关所发生事件的相关信息的JSON对象。客户端应用程序将数据发送到服务器,它被存储在数据库中(或其他地方),每个人都很高兴,对吧?

但现在我并不是真的很高兴。因为现在我有了一个开放API端点(就像允许未经身份验证的创建/写入操作),任何具有一点知识的人都可以轻松地进行垃圾邮件攻击。

我可能会验证端点接受的JSON数据结构,但那并不能真正解决问题。

在类似于“连接到数据库的开放式REST API-如何防止恶意用户垃圾邮件攻击我的数据库?”或“在用户身份验证之前保护REST服务”这样的问题中,有一些建议,例如:

  • 访问配额(但我不希望保存IP或任何标识客户端的信息)
  • 验证码(显然对于错误报告无用)
  • 电子邮件验证(同样,请想象一下)

所以我的问题是:

  1. 有没有一种优雅、常用的策略来保护这样的端点?
  2. 像验证数据结构这样的轻量级解决方案在实践中是否足够?
  3. 所有这些都必要吗?毕竟我不会在应用程序中使用横幅广告我的错误处理API端点...

为什么不使用与API相同的安全性来保护/errors端点? - Dan H
@DanH 因为客户端应用程序(js)应始终能够将错误数据发送到服务器。我对客户端应用程序中的任何类型的错误都感兴趣,无论是已登录用户还是访问者。 - bkis
你是否正在使用OAuth 2.0与身份服务器来保护API? - Dan H
1个回答

2
我看到有三种不同的方法...
1. 假设您正在使用OAuth 2来保护API。建立两个错误端点。 - 对于已登录的用户,如果发生错误,您将会访问/error端点,并使用现有的用户身份验证令牌进行身份验证。 - 对于访客,您可以公开一个/clientError(或以您认为合理的方式命名)端点,该端点接受客户端应用程序的client_credentials令牌。
2. 使用API密钥保护/error端点,该密钥将作为访问错误端点的范围。 - 此密钥将特定于客户端,并在标头中传递。
3. 使用第三方工具,如Raygun.io或任何APM工具,例如New Relic。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接