在 URL 和加密中传递的 HTTP 基本身份验证凭据
Posted
技术标签:
【中文标题】在 URL 和加密中传递的 HTTP 基本身份验证凭据【英文标题】:HTTP Basic Authentication credentials passed in URL and encryption 【发布时间】:2011-02-12 14:30:57 【问题描述】:我对 HTTPS 和 HTTP 身份验证凭据有疑问。
假设我使用 HTTP 身份验证保护 URL:
<Directory /var/www/webcallback>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/passwd/passwords
Require user gooduser
</Directory>
然后我通过 HTTPS 从远程系统访问该 URL,并在 URL 中传递凭据:
https://gooduser:secretpassword@www.example.com/webcallback?foo=bar
用户名和密码会自动进行 SSL 加密吗? GET 和 POST 也一样吗?我很难找到具有此信息的可靠来源。
【问题讨论】:
相关:Username and password in https url 非常老的问题,但尽管如此:这种方法已被ietf.org/rfc/rfc3986.txt 弃用:“不建议在 userinfo 字段中使用“user:password”格式。” 【参考方案1】:用户名和密码会自动进行 SSL 加密吗? GET 和 POST 也是如此
是的,是的。
在使用 SSL 时,整个通信(如果主机名的 IP 尚未缓存,则保存用于 DNS 查找)被加密。
【讨论】:
+1。 GET 和 POST,包括 url,都是加密的。我只会添加 - firebug 和 Tamper data 等工具能够显示未加密的结果只是因为它们是浏览器的一部分,因此能够在加密之前拦截请求。一旦通过网络发送,所有内容都会被加密。 明确地说,除了域之外的所有内容都是加密的。如果有人偶然发现此问题并希望获得更详细的答案,请参阅answers.google.com/answers/threadview/id/758002.html 为了完整起见,"Internet Explorer does not support user names and passwords in Web site addresses (HTTP or HTTPS URLs)" 看起来只有 Internet Explorer 3.0 到 6.0 版支持 HTTP 或 HTTPS URL 的以下语法:http(s)://username:password@server/ resource.ext 注意:默认行为的这种更改不会影响其他协议。例如,您仍然可以在安装 832894 安全更新后在 FTP URL 中包含用户信息。【参考方案2】:不一定正确。它将在网络上被加密,但它仍然以纯文本形式出现在日志中
【讨论】:
什么 Web 服务器记录请求中的用户名和密码?那将是一个非常不安全的网络服务器。 是的,这不是真的。可能可以指示 apache 记录这些信息,但默认情况下肯定不会这样做。 @Brandon 可能在想查询字符串中的“in URL”(例如,?user=bob&pw=123hackmeplz)。这可能会出现在服务器日志中。 相关:“当您在客户端上使用 curl 调用该 URL 时,用户名和密码将在进程列表中清晰可见,并且可能会出现在 bash 历史文件中。” - ***.com/a/4981309 这个答案对 op 来说是一个非常重要的提示。您不应该在 URL 中传递凭据,因为凭据可能最终会出现在某些日志中。因此,即使这不是对原始问题的回答,我也会给予 UPVOTE。【参考方案3】:是的,它将被加密。
你只要看看幕后发生了什么就明白了。
-
浏览器或应用程序将首先分解 URL 并尝试使用 DNS 查询获取主机的 IP。即:将发出 DNS 请求以查找域的 IP 地址 (www.example.com)。请注意,不会通过此请求发送任何其他信息。
浏览器或应用程序将使用从 DNS 请求中收到的 IP 地址发起 SSL 连接。证书将被交换,这发生在传输层。此时不会传输任何应用程序级别信息。请记住,基本身份验证是 HTTP 的一部分,而 HTTP 是应用程序级协议。 不是传输层任务。
建立 SSL 连接后,现在必要的数据将被传递到服务器。 ie:路径或 URL、参数和基本认证用户名和密码。
【讨论】:
以上是关于在 URL 和加密中传递的 HTTP 基本身份验证凭据的主要内容,如果未能解决你的问题,请参考以下文章
在 java 中使用 http 标头在 Spring Security 中传递基本身份验证详细信息
如何在 Express (Node.js) 中使用 URL 编码处理 HTTP 基本身份验证