ChatGPT解决这个技术问题 Extra ChatGPT

在 URL 和加密中传递的 HTTP 基本身份验证凭据

我对 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 也一样吗?我很难找到具有此信息的可靠来源。

非常老的问题,但是:ietf.org/rfc/rfc3986.txt 已弃用此方法:“不建议在 userinfo 字段中使用格式“user:password”。”

R
Ripon Al Wasim

用户名和密码会自动进行 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 中包含用户信息。
R
Ruchira Randana

是的,它将被加密。

如果您只是检查幕后发生的事情,您就会理解它。

浏览器或应用程序将首先分解 URL 并尝试使用 DNS 查询获取主机的 IP。即:将发出 DNS 请求以查找域的 IP 地址 (www.example.com)。请注意,不会通过此请求发送其他信息。浏览器或应用程序将使用从 DNS 请求中收到的 IP 地址发起 SSL 连接。证书将被交换,这发生在传输层。此时不会传输任何应用程序级别信息。请记住,基本身份验证是 HTTP 的一部分,而 HTTP 是应用程序级协议。不是传输层任务。建立 SSL 连接后,现在必要的数据将被传递到服务器。即:路径或URL、参数和基本认证用户名和密码。


B
Brandon

不一定是真的。它将在网络上被加密,但它仍然以纯文本形式出现在日志中


哪个 Web 服务器记录请求中的用户名和密码?那将是一个不安全的网络服务器。
是的,这不是真的。可能可以指示 apache 记录此信息,但默认情况下肯定不会这样做。
@Brandon 可能在想查询字符串中的“in URL”(例如,?user=bob&pw=123hackmeplz)。这可能最终出现在服务器日志中。
相关:“当您在客户端上使用 curl 调用该 URL 时,用户名和密码将在进程列表中清晰可见,并且可能会出现在 bash 历史文件中。” - stackoverflow.com/a/4981309
这个答案对op来说是一个非常重要的提示。您不应该在 URL 中传递凭据,因为凭据可能最终会出现在某些日志中。因此,即使这不是对原始问题的回答,我也会给予 UPVOTE。