Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTAPI获取敏感数据_Rest_Http_Encryption_Get_Idempotent - Fatal编程技术网

RESTAPI获取敏感数据

RESTAPI获取敏感数据,rest,http,encryption,get,idempotent,Rest,Http,Encryption,Get,Idempotent,我正在使用方法设计api,该方法应该是一个幂等元,并且不应该修改服务器上的任何数据。它应该是处理给定参数的请求和返回响应的方法 其中一个参数是敏感数据。这不是使用额外加密的选项。数据已经加密,但安全要求非常严格,即使是加密的数据也应该非常小心地对待 根据REST规范,幂等查询方法应该作为GET HTTP方法实现。本例中的问题是不应在URL中作为GET参数传递的敏感数据。HTTP标准中的唯一选项是在HTTP请求的主体部分传递敏感数据 我的问题是什么更好?破坏了RESTAPI设计,将查询请求作为PO

我正在使用方法设计api,该方法应该是一个幂等元,并且不应该修改服务器上的任何数据。它应该是处理给定参数的请求和返回响应的方法

其中一个参数是敏感数据。这不是使用额外加密的选项。数据已经加密,但安全要求非常严格,即使是加密的数据也应该非常小心地对待

根据REST规范,幂等查询方法应该作为GET HTTP方法实现。本例中的问题是不应在URL中作为GET参数传递的敏感数据。HTTP标准中的唯一选项是在HTTP请求的主体部分传递敏感数据

我的问题是什么更好?破坏了RESTAPI设计,将查询请求作为POST发送,还是在URL中传递加密数据?也许有更好的解决办法我看不到

根据REST规范,应实现幂等查询方法 作为一个GET-HTTP方法

2016年

就我有限的英语所知,我应该必须在这种情况下,发送帖子不会破坏RESTAPI设计。如果可能的话,您可以在HTTP头中发送敏感数据。和ofc。如果要将敏感数据发送到任何位置,应使用HTTPS

2019年

我同时检查了HTTP1.1标准。他们没有明确使用“必须”或“应该”这两个词,但我觉得他们的意思是“应该”。这里还有一个与HTTP相关的东西,我们主要使用GET,因为我们可以用它缓存响应。您不一定要缓存敏感数据,因此当安全性因参数而变得更重要时,坚持使用GET-on-retrieval可能没有意义。你可以找到一些,但是你也可以阅读HTTP标准

从安全角度来看,我的非专家意见如下:

通常查询参数不是那么敏感,通常它们只是随机ID或关键字。因此,问题可能在于您的设计,您应该将这些敏感参数(例如,社会保险号)隐藏在随机ID后面,而不是显式查询它们。这里的另一个想法是,用户凭据必须在中,例如,不在查询字符串中,因此,如果敏感数据是这种类型的,那么您就做错了

据我所知,在URL中发送敏感数据的问题在于,它可能会在浏览器历史记录、缓存、地址栏和服务器日志中未加密显示。尽管许多人通过AJAX(或fetch API)直接从浏览器调用REST webservices,但这并不是预期的使用方式。Web服务主要用于服务器端,将应用程序扩展到多个线程、核心或服务器。因此,如果您使用没有历史记录或缓存的服务器端HTTP客户端以编程方式调用REST webservice,那么您所需要做的就是加密日志。如果客户端有缓存,那么如果您觉得有必要,也可以对其进行加密。我认为可以从日志中过滤这些参数,并根据URL的salt散列存储缓存内容,但我对此没有太多经验

如果您有一个第三方客户端或浏览器,而您没有这种控制,那么您仍然可以假定它遵循HTTP标准。因此,您可以使用缓存控制标头禁用敏感内容的缓存。地址栏和历史记录不是单页应用程序的问题,除非它们使用历史记录API将敏感数据移动到地址栏和历史记录,但无论您做什么,都可能发生这种情况。也有可能。只有在Web服务中提供HTML时,浏览器才会出现问题,因为这假设javascript已禁用(因此不能与敏感的查询字符串一起使用),并且浏览器是REST客户端。我认为这是一个非常不可能的场景,尽管使用XML+XSL重用大部分代码或者现在可能使用NodeJ或其他不同语言上的某种transpiler可以做得比较好


所以我认为,如果你做的每件事都是对的,即使没有帖子,这个问题也可以解决。但这只是一个观点,我在等待安全专家的纠正…

当谷歌搜索REST API获取敏感数据时,会有很多问题出现-我会先检查一下。请参阅,例如,有关反对将其放入查询字符串中的参数-一个重要的参数是url和查询字符串通常记录在web服务器上。请注意,HTTPS使用不会隐藏或编码url或任何GET参数。它们仍然可以嗅到或记录在中间。您可以使用常规POST或发送带有自定义标题参数的数据,如
X-Parameters
。As标头作为POST正文将使用SSL进行编码。@AleksandrRyabov这不是真的。HTTP隐藏了整个URL,但解密后它可以在许多地方显示,包括服务器日志、浏览器历史记录等。。。这就是为什么最好避免在URL中使用敏感数据。如果您从服务器端调用RESTAPI,而不是从浏览器调用RESTAPI,并且服务器日志是加密的,我认为这不是问题。谢谢你的输入,我将编辑答案!不幸的是,这是事实。无论是否使用加密,查询字符串中的所有数据都将公开。在我的安全实践中,我可以看到很多没有加密的日志(不仅仅是日志)。开发人员可以负责在自己的服务器上存储数据(如日志),但中间不能做任何事情。不管请求是从浏览器还是从服务器发送的。这是OWASP的解释:似乎我们正在失去讨论的根本关键。我将重点放在事实上——https方案不会加密查询字符串中的任何数据。它可以只加密请求体。许多人不了解SSL是如何工作的,他们认为使用SSL发送的所有内容都是加密的,这是错误的。这就是为什么我指定了指向OWASP的链接,并对问题进行了完整的解释。让我再具体说明一次:简短的回答是