在https中传递查询字符串的安全性

译者:java达人-卍极客

英文链接:

http://blog.httpwatch.com/2009/02/20/how-secure-are-query-strings-over-https/(点击文末阅读原文前往)

我们常常听到这样一个问题:“参数是否可以在URLs中安全地传递到安全站点?“ 这个问题常常出现于客户看了HttpWatch的HTTPS请求后,想知道还有谁可以看到这些数据。

例如,假设在查询字符串参数中使用以下安全网址传递密码:

https://www.httpwatch.com/?password=mypassword

HttpWatch能够显示安全请求的内容,因为它与浏览器集成,并且在用于HTTPS请求的SSL连接对数据进行加密之前查看数据

如果你看网络嗅探器,如Network Monitor,同一请求,你前后只会看到加密的数据。 在数据包跟踪中网址,标题或内容多是不可见的。

您可以依赖一个安全的HTTPS请求,只要:

1、未忽略任何SSL证书警告

2、Web服务器用于启动SSL连接的私钥在Web服务器本身之外不可用。

因此,在网络层面,URL参数是安全的,但是其他一些途径会泄漏基于URL的数据:

1、URL存储在Web服务器日志中 - 特别是每个请求的整个URL都存储在服务器日志中。 这意味着URL中的任何敏感数据(例如密码)以明文形式保存在服务器上。 以下是使用查询字符串通过HTTPS发送密码时存储在httpwatch.com服务器日志中的条目:

2009-02-20 10:18:27 W3SVC4326 WWW 208.101.31.210 GET /Default.htm password=mypassword 443 ...

存储明文密码通常不是一个好主意,即使是在服务器上。

2、网址存储在浏览器历史记录中 - 即使安全网页本身未缓存,浏览器也会将网址参数保存在其历史记录中。 以下是显示URL参数的IE历史记录

如果用户创建书签,也会存储查询字符串参数。

3、URLs在Referrer头中传递 - 如果安全网页使用诸如javascript,图片或分析服务等资源,则该URL会在每个嵌入请求的 Referrer请求头中传递。 有时,查询字符串参数可以被传递到第三方站点并由其存储。 在HttpWatch中,您可以看到我们的密码查询字符串参数正在发送到Google Analytics:

结论

解决这个问题需要两个步骤:

1、只在绝对必要的情况下传递敏感数据。

2、如果用户被认证,最好使用具有有限生命周期的会话ID来标识它们。使用非持久会话级别的Cookie来保存会话ID和其他私人数据。

使用会话级Cookie来传递此信息的优点是:

它们不存储在浏览器历史记录中或磁盘上

它们通常不存储在服务器日志中

它们不会传递到嵌入式资源,例如图片或JavaScript库

它们仅适用于发出它们的域和路径

下面是在我们的在线商店中用于识别用户的ASP.NET会话cookie的示例:

请注意,该cookie仅限于域store.httpwatch.com,并且在浏览器会话结束时过期(即不会存储到磁盘)。

你当然可以在HTTPS中使用查询字符串参数,但在有可能暴露安全问题时不要使用它们。 例如,您可以安全地使用它们来标识部件号或显示的类型,但不要将它们用于密码,信用卡号码或其他不应公开的信息。

原文发布于微信公众号 - java达人(drjava)

原文发表时间:2017-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhisheng

听说你要做网站

现代 Web 后端技术超入门 引言 现在房价这么高,作为一个程序员只能靠做个网站看能不能卖出 100 万这样搏一手了。这里尝试介绍一下现代 Web 后端并解释一...

3708
来自专栏IT笔记

Caused by: java.net.UnknownHostException: openapi.alipay.com

支付宝下单,openapi.alipay.com就是传说中的支付宝网关名。 所有的所有配置好以后,包括pid、appid以及RSA私钥、公钥和支付宝公钥。 支付...

5629
来自专栏更流畅、简洁的软件开发方式

js的动态加载、缓存、更新以及复用(三)

总体思路 1、  建立一个js服务,该服务实现通用js文件的加载、依赖、缓存、更新以及复用。 2、  各个项目如果使用通用js,可(bi)以(xu)使用js服务...

3519
来自专栏Pythonista

web service基础知识

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: ...

2823
来自专栏北京马哥教育

25个必须记住的SSH命令

OpenSSH是SSH连接工具的免费版本。telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSS...

3555
来自专栏Android 开发者

Android P 开发者预览版支持 DNS over TLS

3073
来自专栏古时的风筝

说一说几种常用的登录认证方式,你用的哪种

登录认证几乎是任何一个系统的标配,web 系统、APP、PC 客户端等,好多都需要注册、登录、授权认证。 场景说明 以一个电商系统,假设淘宝为例,如果我们想要...

48011
来自专栏Ryan Miao

Git:错误:error:src refspec master does not match any

新建立了一个远程仓库,想着把项目放上去。于是在项目目录上: git init 然后就添加远程库 git remote add origin xxxx.git 然...

3328
来自专栏嵌入式程序猿

树莓派U盘挂载实例操作

在前面的树莓派学习中,我们讲了很多,今天我们 讲讲U盘挂载,在linux系统的开发中,当需要大容量外接存储设备时候,可使用U盘,移动硬盘等,我们以U盘挂载为例来...

3856
来自专栏Crossin的编程教室

如何安装 Python 的第三方模块

正所谓“人生苦短,我用 Python”。Python 的一大优势就是有丰富且易用的第三方模块,省去了大量重复造轮子的时间,节约了众多开发者的生命。对于已经熟悉 ...

2749

扫码关注云+社区