【问题标题】:How to secure GET request when queried in a browser tab在浏览器选项卡中查询时如何保护 GET 请求
【发布时间】:2019-10-06 21:00:48
【问题描述】:

我目前的任务是开发最重要的安全性股票市场数据 API。我能够使用 JWT、API 密钥、中间件身份验证来保护传入的 GET 请求。

假设当用户未登录时,众所周知,所有 http 方法,尤其是 GET,都以 http 状态 401 未经授权的访问响应。

我的问题是当用户登录我们的应用程序时,现在可以成功查询 API 请求(服务器到服务器)但是 当我将请求链接复制到浏览器的新选项卡(比如 chrome)时,我可以看到回复。这是预期的,因为用户已登录,但我希望在浏览器中看不到请求响应。我们的其他竞争对手使用 POST 来对抗浏览器的 GET 默认值。

我们应该转到 POST 吗?我正在苦苦挣扎,因为 GET 是请求内容的正确 http 方法。

【问题讨论】:

    标签: http go


    【解决方案1】:

    对于像股市数据这样的私人资料,我的第一选择是发帖请求。

    我曾经通过检测浏览器来阻止来自浏览器的 GET API 请求,基于诸如用户代理字符串和自定义头部元数据之类的东西,但根据经验,这不是一个完美的解决方案。

    我过去使用的另一个技巧是使用简单的加密算法(它不安全但速度很快。这只是分散注意力)来加密值。因此,如果有人确实提取了 json 响应,则数据将是垃圾,除非使用密钥解密,在您的情况下可能是 jwt 令牌。

    再一次,这些技巧对于高技术人员的安全无济于事,但足以分散常规到平均反向工程技巧的注意力。同样免责声明,我从未将 GET 用于任何重要的财务和股票相关信息。我的规则是 GET 用于正常填充内容,而 POST 用于重要内容。

    【讨论】:

      【解决方案2】:

      如果您想在浏览器窗口中隐藏输出,最好转到POST。与GET 一样,浏览器将始终直接显示输出。

      但是,请注意,如果有人想查看 API 响应,他们仍然可以使用 JS 模拟 API 调用并在浏览器控制台中查看响应,或者使用 Postman 之类的客户端来获取响应。如果他们有适当的令牌,他们总是可以检查您的响应,没有办法绕过它。

      我相信它也可以在新标签页中工作,因为用户已登录并且 JWT 令牌以可从新标签页访问的方式存储在 cookie / localstorage / 中。您的服务器也可以访问它。

      如果您使用 JS 应用程序发送令牌(可能是 React?)并调整您的服务器以每次都通过请求标头接受令牌,在这种情况下,仅打开该 url 将不再有效,因为它将具有请求标头中缺少令牌。

      【讨论】:

      • 在使用邮递员访问 API 响应方面,我将其配置为服务器到服务器身份验证,因此即使是编程的请求(机器人请求),rest-clients 也无法访问它。对于您的最后一个建议,如果您在浏览器中成功登录状态,您仍然可以获得响应,因为它是一种 GET 方法,在这种情况下,自用户登录后授权。
      • 如果令牌是在请求标头中发送的,那应该需要浏览器手动将其放入标头中,因为浏览器自己不知道这样做。对于服务器到服务器的通信部分,这也意味着任何其他客户端都无法直接从浏览器或移动设备访问 API。他们必须通过另一台服务器代理。如果用户使用该代理服务器进行身份验证,它仍然会发生。
      • 是的,令牌是通过请求标头发送的,但请求是通过服务器到服务器的通信发送的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2021-02-26
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多