首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST获取敏感数据

REST获取敏感数据
EN

Stack Overflow用户
提问于 2016-09-19 08:35:48
回答 1查看 19.8K关注 0票数 15

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

其中一个参数是敏感数据。使用附加加密并不是一种选择。数据已经加密,但安全性要求非常高,即使加密的数据也应该非常小心地处理。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-23 21:35:31

根据REST规范,幂等查询方法应该实现为GET HTTP方法。

2016年

据我所知,用我有限的英语应该!在本例中,您不会通过发送帖子来破坏REST设计。如果可能,可以将敏感数据发送到HTTP报头中。还有ofc。如果要将敏感数据发送到任何地方,则应使用HTTPS。

2019年

同时,我检查了HTTP1.1标准。他们没有明确地使用必须或应该词在关于幂等性的规范中,但我得到他们的印象,他们的意思是应该。这里还有一个与HTTP相关的东西,我们使用GET主要是因为我们可以用它来缓存响应。您不一定希望缓存敏感数据,因此,当安全性由参数更重要时,坚持使用GET进行检索可能没有意义。您可以找到一些有关如何在此处设置缓存控制标头的技巧,但也可以阅读HTTP标准。

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

通常,查询参数并不那么敏感,通常只是随机ids或关键字。因此,问题可能在于您的设计,您应该将这些敏感参数(例如社会安全号)隐藏在随机is后面,而不是显式地查询它们。这里的另一个想法是,用户凭据必须在授权头中--例如,不是在查询字符串中--所以如果敏感数据是这样的,那么您就错了。

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

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

因此,我认为,即使没有帖子,如果你做的一切正确,这是可以解决的。但这只是一个意见,我等待安全专家纠正我.

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39568719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档