当前位置: 首页 > 知识库问答 >
问题:

REST web服务上的HTTP GET请求是否安全?

钮晟
2023-03-14

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

想象一下这种情况:

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

它的工作原理如下:/patients/HASHCODE

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

我能说这是访问我的API的安全方法吗?如果没有,我应该如何实施?

共有1个答案

杨乐
2023-03-14

首先,您必须使用HTTPS,因为它确保对正文和标题进行加密。选择证书颁发机构颁发的证书,远离自签名证书。

如果您所说的哈希意味着访问令牌,那么它属于带有承载身份验证方案的Authoration标头(有关详细信息,请参阅此答案)。或者,您可能希望使用同时设置了HttpOnlySecure标志的cookie。

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

任何类型的敏感信息(例如凭据、访问令牌、您的名字)都不能在URL中发送:请求的URL可能会被服务器和代理记录;如果浏览器请求URL,则URL会转到浏览器历史记录。您肯定想避免这种情况。

GET用于数据检索,而POST是一种包罗万象的动词,即有效负载中发送的表示将根据资源自己的特定语义学进行处理)。如果您需要将敏感信息发送到服务器,我建议您使用POST,发送有效负载中的任何敏感数据,这些数据将通过HTTPS加密。

 类似资料:
  • 向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,

  • 问题内容: 刚开始在本地服务器上试用Flask时,我注意到请求/响应时间比我预期的要慢得多。 像下面这样的简单服务器需要近5秒钟才能响应。 有任何想法吗?还是这只是本地服务器的方式? 问题答案: 在支持ipv6并进行了配置的操作系统(例如现代Linux系统,OS X 10.4或更高版本以及Windows Vista)上,如果访问本地服务器,某些浏览器可能会非常缓慢。原因是有时ipv4和ipv6套接

  • Python 的标准库 urllib 提供了大部分 HTTP 功能,但使用起来较繁琐。通常,我们会使用另外一个优秀的第三方库:Requests,它的标语是:Requests: HTTP for Humans。 Requests 提供了很多功能特性,几乎涵盖了当今 Web 服务的需求,比如: 浏览器式的 SSL 验证 身份认证 Keep-Alive & 连接池 带持久 Cookie 的会话 流下载

  • 我想使用jwt令牌向我的应用程序添加身份验证。 每次向服务器发送请求时,我都会附加服务器创建的令牌。 我受伤了,这是在标头中发送令牌的安全方式吗?如果有人访问我的计算机并在 DevTools 选项卡中检查我的网络并看到我的令牌,他可以使用令牌模拟请求并控制用户数据。 这是常见的情况吗?以及窃取和黑客 JWT 代币的方法?

  • 我正在尝试创建一个网页,允许用户从其计算机上载文件,然后将其发布到我的服务器。然而,每当我点击当前网页上的“提交”按钮时,它就会立即返回 404找不到。在服务器上找不到请求的URL。如果您手动输入URL,请检查拼写并重试。 这是我的HTML表单 对不起,如果这是一个非常明显的错误,我是非常新的php

  • 我有一个Ubuntu 14.04内核。我正在这个服务器上安装我的Laravel应用程序。安装之后,我尝试将根目录设置为public。 我在文件中只有这些选项 我已将文档根目录更改为 现在,当我试图通过它显示主页,运行良好。它还获取所有GET变量。例: 但是当我转到其他链接时,例如它给了我一个错误 我有路线。php在本地主机上运行良好。但不在此服务器上。请帮帮我。