如何保护用于报告客户端 JS 错误的 API 端点免受垃圾邮件的侵害(如有必要)?

How to protect an API endpoint for reporting client-side JS errors against spam (if even necessary)?

提问人:bkis 提问时间:3/19/2019 最后编辑:bkis 更新时间:3/20/2019 访问量:700

问:

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

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

现在我不是,真的。因为现在我有一个开放的(如允许未经身份验证的创建/写入操作)API 端点,所以每个只有一点知识的人都可以轻松发送垃圾邮件。

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

在诸如“附加到数据库的开放REST API-什么阻止了不良行为者向我的数据库发送垃圾邮件?”或“用户身份验证之前的安全REST-Service”之类的问题中,有一些建议,例如:

  • 访问配额(但我不想保存 IP 或任何内容来识别客户端)
  • 验证码(显然对错误报告没用)
  • 电子邮件验证(一样,想象一下)

所以我的问题是:

  1. 是否有一种优雅的、常用的策略来保护这样的端点?
  2. 在实践中,像验证数据结构这样的轻量级解决方案就足够了吗?
  3. 这一切有必要吗?毕竟,我不会在应用程序中使用横幅宣传我的错误处理 API 端点......
REST 安全 垃圾邮件预防 错误报告

评论

0赞 Dan H 3/19/2019
为什么不使用与 API 相同的安全性来保护 /errors 端点呢?
0赞 bkis 3/19/2019
@DanH 因为客户端应用 (js) 应始终能够将错误数据发送到服务器。我对客户端应用程序中的任何类型的错误感兴趣,登录用户和访问者都感兴趣。
0赞 Dan H 3/20/2019
您是否将 OAuth 2.0 与 Identity Server 结合使用来保护 API?

答:

2赞 Dan H 3/20/2019 #1

我已经看到它以三种不同的方式完成......

  1. 假设您使用 OAuth 2 来保护您的 API。站立两个 错误终结点。

    • 对于登录用户,如果发生错误,您将 点击 /Error 端点,并使用现有的 用户身份验证令牌。
    • 对于访问者,您可以公开 /clientError (或 以对你有意义的方式命名)端点,该端点采用 客户端应用的client_credentials令牌。
  2. 使用作用域为 的 API 密钥保护 /error 终结点 仅访问错误终结点。

    • 此键将特定于 client 并将在标头中传递。
  3. 使用第三方工具(如 Raygun.io)或任何 APM 工具(如 New Relic)。