在浏览器选项卡中查询时如何保护GET请求

时间:2019-10-06 12:46:09

标签: http go

目前,我受命开发具有最高安全性的股票市场数据API。我能够使用JWT,API密钥,中间件身份验证来保护传入的GET请求。

让我们说,当用户未登录时,众所周知,所有http方法(特别是GET)都以http状态401未授权访问进行响应。

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

我们应该转到POST吗?由于GET是用于请求内容的合适的http方法,因此我很苦恼。

2 个答案:

答案 0 :(得分:1)

对于诸如股票市场数据之类的私人信息,我的第一选择是发布请求。

我曾经基于具有useragent字符串和自定义头部元数据之类的东西来检测浏览器,从而阻止了来自浏览器的GET API请求,但是基于经验,这并不是一个完美的解决方案。

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

同样,这些技巧对于针对技术含量高的人的安全性没有任何帮助,但足以分散常规到平均反向英语技巧的注意力。同样免责声明,我从未将GET用于与财务和股票相关的重要信息。我的规则是普通填充物为GET,重要填充物为POST。

答案 1 :(得分:0)

如果要在浏览器窗口中隐藏输出,建议移至POST。与GET一样,浏览器将始终直接显示输出。

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

我认为它也可以在新选项卡中运行,因为用户已登录并且JWT令牌以可从新选项卡访问的方式存储在cookie / localstorage /中。您的服务器也可以访问它。

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