HTTPS查询string是否安全?
我正在创build一个使用HTTPS的安全的基于Web的API; 然而,如果我允许用户configuration它(包括发送密码)使用查询string将这也是安全的,或者我应该强制它通过POST完成?
是的。 但是对于敏感数据使用GET是一个糟糕的主意 ,原因如下:
- 大多数HTTP引用泄漏(目标页面中的外部图像可能泄漏密码[1])
- 密码将被存储在服务器日志中(这显然是不好的)
- 浏览器中的历史caching
因此,尽pipeQuerystring是安全的,但不build议将敏感数据传输到查询string。
[1]虽然我需要注意的是,RFC指出浏览器不应该将引用从HTTPS发送到HTTP。 但是,这并不意味着HTTPS网站上的第三方浏览器工具栏或外部图像/闪光灯不会泄漏。
从“嗅探networking数据包”的angular度来看,GET请求是安全的,因为浏览器将首先build立安全连接,然后发送包含GET参数的请求。 但GET url将被存储在用户浏览器历史logging/自动完成中,这不是一个存储密码数据的好地方。当然,这只适用于从浏览器访问服务的更广泛的“Web服务”定义,如果您只从您的自定义应用程序访问它,这应该不成问题。
所以最好使用post至less用于密码对话框。 另外正如链接中指出的,littlegeek发布的GET URL更可能写入您的服务器日志。
是。 HTTPS会话的整个文本由SSL保护。 这包括查询和标题。 在这方面,POST和GET将完全相同。
至于你方法的安全性,没有适当的检查就没有真正的方法。
SSL首先连接到主机,因此主机名和端口号将作为明文传输。 当主机响应并且挑战成功时,客户端将用实际的URL(即,第三个斜线之后的任何东西)encryptionHTTP请求,并且将其发送到服务器。
有几种方法可以打破这种安全性。
可以将代理configuration为“中间人”。 基本上,浏览器发送连接到真实服务器的请求到代理。 如果以这种方式configuration代理,它将通过SSL连接到真实服务器,但浏览器仍然会与代理进行通信。 因此,如果攻击者可以获得代理的访问权限,他可以以明文forms查看所有通过它的数据。
您的请求也将在浏览器历史logging中显示。 用户可能会试图为网站添加书签。 有些用户已经安装了书签同步工具,所以密码最终可能在deli.ci.us或其他地方。
最后,有人可能会黑客入侵您的电脑,并安装了键盘logging器或屏幕刮取器(以及大量的特洛伊木马病毒)。 由于密码在屏幕上直接可见(与密码对话框中的“*”相对),这是另一个安全漏洞。
结论:在安全方面,总是要依靠打击的path。 有太多你不知道,不会想到,哪个会打破你的脖子。
是的 ,你的查询string将被encryption。
其原因是查询string是应用层协议的HTTP
协议的一部分,而安全(SSL/TLS)
部分来自传输层。 首先build立SSL
连接,然后是发送给服务器的查询参数(属于http协议)。
build立SSL
连接时,客户端将按顺序调用以下步骤。 假设您正在尝试login名为Example的站点,并希望使用查询参数发送您的凭证。 您的完整URL
可能如下所示。
(eg http://example.com/login?username=alice&password=12345)
- 您的客户将首先使用
DNS
请求将您的域名(example.com)
parsing为IP
地址(124.21.12.31)
。 查询该信息时,仅使用特定于域的信息。 即:只有example.com
将被使用。 - 现在,您的客户端将尝试连接到
IP
地址为124.21.12.31
的服务器,并尝试连接到端口443
(SSL
服务端口不是默认的http
端口80
)。 - 现在,
example.com
的服务器将把它的证书发送给你的客户端。 - 您的客户端将validation证书并开始为您的会话交换共享密钥。
- 成功build立安全连接后,只有通过安全连接才能发送您的查询参数。
因此,您不会暴露敏感数据。 但是,使用此方法通过https会话发送凭据不是最好的方法。 你应该去一个不同的方法。
是的,只要没有人在监视器上看着你的肩膀。
我不同意在Slough的回复中有关HTTP引用者泄漏(目标页面中的外部图像可能泄露密码) 的声明 。
HTTP 1.1 RFC 明确指出 :
如果引用页面是通过安全协议传输的,那么客户端不应该在(非安全)HTTP请求中包含Referer头域。
无论如何,服务器日志和浏览器历史是绰绰有余的原因,不要把敏感数据放在查询string中。
是的,从您build立HTTPS连接的那一刻开始, 作为POST的查询string(GET)通过SSL发送。
您可以发送密码作为MD5哈希参数与一些盐添加。 在服务器端比较它的身份validation。