面试题
问题1: 浏览器的地址栏输入一个URL并按下Enter键时候...
当用户在浏览器的地址栏输入一个URL并按下Enter键时,浏览器会发起一个HTTP请求,这个过程经历了以下步骤:
DNS解析: 浏览器首先会解析URL中的域名,将域名转换为相应的IP地址。这通过DNS(Domain Name System)完成,浏览器向本地DNS服务器发出查询请求,获取目标服务器的IP地址。
浏览器会首先检查本地缓存是否有该URL对应的IP地址。如果没有,则会向本地DNS服务器发送一个查询请求。如果本地DNS服务器也没有该记录,则会向根域名服务器发送请求。
建立TCP连接: 使用获得的IP地址,浏览器开始建立与服务器的TCP连接。这是一个三次握手的过程:
- 客户端向服务器发送一个SYN(同步)请求。
- 服务器收到SYN请求后,回应一个ACK(确认)并发送自己的SYN。
- 客户端收到服务器的SYN后,发送一个ACK,表示连接建立完成。
此时,TCP连接已经建立,客户端和服务器可以开始进行数据传输。
发起HTTP请求: 一旦TCP连接建立,浏览器会向服务器发送一个HTTP请求。请求中包含了要访问的资源的URL、请求方法(例如GET、POST)、请求头(包含浏览器的信息、支持的压缩算法等)以及可能的请求体(对于POST请求)。
服务器处理请求: 服务器接收到HTTP请求后,根据请求中的信息决定如何处理。这可能包括查询数据库、执行应用程序逻辑、读取文件等操作。
服务器发送HTTP响应: 服务器将处理结果封装在HTTP响应中,包括状态码、响应头和响应体。状态码指示了请求的成功或失败,响应头包含了一些元信息,而响应体包含了实际的数据。
传输数据: 服务器将HTTP响应通过TCP连接发送回客户端。数据的传输可能会经过多个网络节点,包括路由器、交换机等。
浏览器渲染: 一旦浏览器接收到完整的HTTP响应,它会根据响应中的内容类型(如HTML、CSS、JavaScript)进行相应的渲染,将页面呈现给用户。
断开TCP连接: 如果响应头中没有指定保持连接的要求(例如
Connection: keep-alive
),浏览器会关闭TCP连接。如果连接保持活动,它可以在未来的请求中被重用,以减少连接建立的开销。
总体而言,这是一个简化的描述,实际上还涉及到许多优化和细节。这个过程展示了HTTP协议和TCP协议之间的配合,TCP负责可靠的数据传输,而HTTP则定义了数据传输的具体规则和格式。
问题2: DNS劫持检测与防御技术
DNS(Domain Name System)劫持是一种网络攻击,攻击者通过篡改DNS解析的结果,将合法的域名解析到恶意的IP地址(恶意网站或者虚假页面)。这种攻击可能导致用户被引导到恶意站点,劫持其网络流量。
以下是DNS劫持检测与防御的一些技术:
DNS劫持检测技术:
DNS响应验证:
- 对于发起的DNS请求,客户端可以验证DNS响应是否与期望的结果一致。如果DNS响应的IP地址与预期不符,可能存在DNS劫持。
- 使用DNSSEC(DNS Security Extensions)签名DNS响应,以确保响应的完整性和真实性。
流量行为分析:
- 监测网络流量的行为模式,检测是否存在异常的域名解析行为。
- 检查DNS请求和响应的数量、频率以及与正常流量的差异。
安全DNS服务:
- 使用提供安全DNS服务的DNS解析器,例如Google Public DNS、Cloudflare DNS等。这些服务通常具有一些安全机制来防范DNS劫持。
DNS查询监控:
- 实时监控DNS查询,及时发现异常的DNS解析请求。
- 设置警报机制,以便在检测到异常时及时采取措施。
DNS劫持防御技术:
使用DNS over HTTPS(DoH)或DNS over TLS(DoT):
- 使用加密的DNS通信通道,防止DNS劫持者窃取或篡改DNS请求和响应。
DNSSEC的使用:
- 部署DNSSEC来防范DNS劫持。DNSSEC通过数字签名确保DNS响应的真实性,有效防止劫持者篡改DNS记录。
HTTP Strict Transport Security(HSTS):
- 通过在网站响应头中设置HSTS,强制客户端只能通过HTTPS连接访问,防止使用恶意的HTTP重定向。
网络监测和入侵检测系统:
- 部署网络监测和入侵检测系统,实时监控网络流量,检测和阻止异常的DNS解析行为。
域名注册锁定:
- 使用域名注册锁定服务,确保域名注册信息不会被非法篡改,防范域名劫持攻击。
定期更新DNS软件和系统:
- 确保使用的DNS软件和系统是最新版本,以防止已知的漏洞被攻击者利用。
以上方法通常需要综合使用,因为没有单一的解决方案能够完全消除DNS劫持的风险。综合运用这些技术,可以提高系统的安全性,降低DNS劫持攻击的成功概率。
3. 说一下GET和POST的区别
- GET在浏览器回退时候是无害的,而POST会再次提交请求
- GET产生的URL地址可以被Bookmark,而POST不可以
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求只能进行url编码,而POST支持多种编码方式
- GET请求参数会被完整保留在浏览器的历史记录里面,而POST中的参数不会被保留
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- 对参数的数据类型,GET只接受ascll字符,而POST没有限制
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
- GET参数通过URL传递,POST放在Request body中
3.1 POST
比GET
安全,因为数据在地址栏上不可见
然后,从传输的角度来说,他们都是不安全的,因为
HTTP
在网络上是明文传输的,只要在网络节点上抓包,就能完整地获取数据报文。只有使用HTTPS
才能加密安全。
4. 什么是HTTP?HTTP和HTTPS的区别?
4.1 HTTP
HTTP
(HyperText Transfer Protocol), 即超文本运输协议,是实现网络通信的一种规范。
- 支持客户/服务器模式
- 简单快速: 客户向服务器请求服务时候,只需要传送请求方法和路径,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型用content-type加以标记
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间
- 无状态:HTTP协议无法根据之前的状态进行本次的请求处理
4.2 HTTPS
HTTPS
的出现正是为了解决HTTP
不安全的特性
- 为了保证这些隐私数据能够加密传输,让HTTP运行安全的
SSL/TLS
协议上,即HTTPS = HTTP + SSL/TLS,通过验证ssl证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密- 客户端通过URL访问服务器建立SSL连接
- 服务端收到客户端的请求,会将网站支持的证书信息(证书中包括公钥)传送一份给客户端
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送网站
- 服务器利用自己的私钥解密出会话密钥
- 服务器利用会话密钥加密与客户端之间的通信
4.3 区别
- HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS进行了加密处理,相对更安全
- HTTP和HTTPS使用连接方式不同,默认端口也不一样,HTTP是80,HTTPS是443
- HTTPS由于需要设计加密以及多次握手,性能方面不如HTTP
- HTTPS需要SSL,SSL证书需要钱,功能越强大的证书费用越贵