RESTWeb服务上的HTTPGET请求是否安全?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (153)

我目前正在研究一种在Django REST Framework中开发的新的REST Web服务,在定义URL时我对它的安全性存在疑问。遵循为数据库中的列表数据定义GET方法的标准,我不明白这是否是一种带来数据的安全方法。

想象一下这种情况:

我访问定义的URL /患者返回患者列表。此列表不公开,只能由授权用户请求。由于并非所有用户都可以看到所有患者,因此我创建了一个作为密钥的哈希码,允许列出该特定用户的患者。如果没有提供哈希码,则该方法返回403 forbiden。

它的工作方式如下:/ patients / HASHCODE

由于我的哈希代码是URL中的请求而不是HTTP消息体内的请求,就像通过POST方法完成的那样,这看起来不安全。我知道SSL可以隐藏一些请求信息,但不能隐藏GET请求。当然,这个哈希不应该对任何人都不可见。

我可以说这是访问我的API的安全方法吗?如果没有,我该如何实现呢?

提问于
用户回答回答于

首先,您必须将HTTPS与证书颁发机构颁发的证书一起使用(不要使用自签名证书)。HTTPS确保正文标头都已加密。

如果您调用哈希意味着访问令牌,那么它属于Authorization具有Bearer身份验证方案的标头。有关详细信息,请参阅此答案

我还建议您研究一下您的应用程序的某种授权机制。并根据用户角色或权限,检索他们可以访问或拒绝请求的数据。您的Web框架很可能已经为授权机制提供了某种类型。另外,不要写自己的安全相关的东西(除非你真的知道你在做什么)。

请记住,任何类型的敏感信息(例如凭证,访问令牌,您的名称)不得在URL中发送:请求的URL可能由服务器和代理记录; 如果浏览器请求URL,则URL将转到浏览器历史记录。然后你就有了安全漏洞。

GET用于数据检索虽然POST有点捕获所有动词,也就是说,有效载荷中发送的表示将根据资源自身的特定语义进行处理。如果您需要向服务器发送敏感信息,我建议您使用POST,在请求有效负载中发送任何敏感信息,这些信息将通过HTTPS加密。

扫码关注云+社区

领取腾讯云代金券