我google了很多,很多答案都是是。例如:Is GET data also encrypted in HTTPS?但我们公司的高级安全工程师告诉我,URL不会被加密。
图片,如果URL已加密,DNS服务器如何找到主机并连接?
我认为这是非常强烈的观点,尽管它反对大多数答案。所以我真的很困惑,我的问题是:
我尝试访问https://www.amazon.com/gp/css/homepage.html/ref=ya_surl_youracct,我的IE向服务器发送了两个请求:
首先:
CONNECT www.amazon.com:443 HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: www.amazon.com
Content-Length: 0
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
第二
GET /gp/css/homepage.html/ref=ya_surl_youracct HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: www.amazon.com
DNT: 1
Connection: Keep-Alive
似乎我的浏览器已请求两次:第一次是与主机建立连接(没有加密),第二次是通过https发送加密请求?我对吗?如果我正确理解这一点,当客户端使用https调用RESTFUL API时,它每次都会发送两次请求(连接和获取/发布)?
答案 0 :(得分:11)
网址 IS 从浏览器离开目标服务器时加密。
浏览器会从URL中提取域名和端口,并使用它来解析DNS本身。然后它启动加密通道到目标服务器IP:端口。然后它通过该加密通道发送HTTP请求。
重要的部分是任何人,但您和目标服务器只能看到您正在连接到特定的IP地址和端口。他们无法说出任何其他内容(例如特定网址,GET参数等)。
在大多数情况下,攻击者甚至无法看到域名(尽管他们可以推断出是否存在DNS查找 - 如果它没有被缓存)。
要理解的重要一点是,DNS(域名服务)是一种完全不同的服务,具有与HTTP不同的协议。浏览器发出DNS查询请求以将域名转换为IP地址。然后它使用该IP地址发出HTTP请求。
但DNS服务器在任何时候都没有收到HTTP请求,除了为用户提供域名 - IP映射之外,它实际上什么都不做。
答案 1 :(得分:7)
虽然其他响应是正确的,但除了浏览器和服务器之间的加密之外,还有许多其他注意事项。以下是一些需要考虑的事情......
CONNECT
。如果这就是全部,那么你就完成了。没问题。
但等等,还有更多!
将字段放在GET
而不是POST
时会显示敏感数据......
GET
请求会将数据泄露给使用该设备的其他人。正如我所提到的,我有时会在博客的引荐记录日志中找到ID,密码和其他敏感信息。在我的情况下,我联系推荐网站的所有者并告诉他们他们正在暴露他们的用户黑客攻击。一个不那么谨慎的人会在网站上添加评论或更新链接到他们自己的网站,目的是在他们的推荐人日志中收集敏感数据。
因此,贵公司的高级安全工程师认为,URL在许多地方都没有加密,因为这样做非常重要。您和其他受访者也是正确的,它是在浏览器的非常狭窄的用例中加密 ,在TLS会话的上下文中与服务器通信。也许您提到的混淆与这两个用例范围的差异有关。
请参阅:
答案 2 :(得分:3)
URL(也称为“统一资源定位器”)包含四个部分:
一些例子:
ftp://www.ftp.org/docs/test.txt
mailto:user@test101.com
news:soc.culture.Singapore
telnet://www.test101.com/
作为整个单元的URL实际上并未加密,因为它未完整传递。 URL实际上被分成比特,每个部分以不同的方式使用。例如。协议部分将告诉您的浏览器如何使用URL的其余部分,主机名将告诉它如何查找预期收件人的IP地址,并且端口将告诉它,以及使用哪个端口。 有效负载本身传递的URL的唯一部分是路径和查询,并且该部分已加密。
如果您查看raw中的HTTP请求,它看起来像这样:
GET /docs/index.html HTTP/1.1
Host: www.test101.com
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(blank line)
--Body goes here--
您在上面的示例中看到的内容已通过。请注意,完整的URL无处可见。实际上可以完全省略主机头(它不用于路由)。此处显示的URL的唯一部分位于GET动词的右侧,并且仅包括原始URL的最右侧部分。协议和端口号在消息本身中没有出现。
简短回答:URL中端口号右侧的所有内容都包含在https请求的有效负载中,实际上是加密的。