浏览器 - http & https
2023-10-23 21:41:55 # fontend

1. http 的三次握手

  • 一开始客户端和服务端都处于 close 状态,服务端监听某个端口
  • 客户端首先向服务端发起 SYN 报文,表示向服务端发起连接,此次不包含任何应用数据,客户端发送之后处于 SYN-SENT 状态
  • 服务端接收到客户端的报文之后,也发送一个自己的序号和确认应答号 然后是 SYN + ACK 发送给客户端,之后处于 SYN-RCVD 状态
  • 客户端接收到之后,发送确认应答号和 ACK 标识位置为1 发送给服务端 之后客户端处于 ESTABLISHED 状态
  • 服务端接收到报文之后,也处于 ESTABLISHED 状态,这时三次握手完毕,连接建立完成,可以正式通信

为啥不是一次 两次握手?

  • 一次握手不能保证双方都具有接收和发送的能力
  • 两次握手也不能保证以下两点:
    • 阻止历史连接, 避免资源浪费: 两次握手之后 服务端进入 ESTABLISHED 状态 但是这是客户端可能宕机了,没有进入 ESTABLISHED 状态,这就回导致 服务端一直在等待客户端通信,造成资源的浪费
    • 同步双方的序列号:
      • 序列号的作用:
        • 接收方可以去除重复的数据;
        • 接收方可以根据数据包的序列号按序接收;
        • 可以标识发送出去的数据包中, 哪些是已经被对方收到的(通过 ACK 报文中的序列号知道);

2. https 的三次握手

https 就是 http 的加密通信,原理是 http + ssl/tls, https 通信为了保证传输的保密性和安全性采用对称和非对称混合加密的方式.

  • 首先采用非对称加密的方式获取对称加密的密钥
  • 非对称加密过程则是由客户端用公钥加密传输到服务端,服务端通过私钥解密请求信息
  • 服务端也通过公钥加密传输共享密钥,客户端接收到共享密钥在确认密钥安全的前提下,通过共享密钥传输信息
  • 为啥不直接用非对称加密方式传输: 因为非对称处理速度更慢

在进行公钥传输时,要确保公钥是安全有效的,并且确保收到的公钥就是原本预想的服务器的公钥,而不是在传输过程中被替换掉了,所以就有了由相关数字证书认证机构颁发相关的公钥证书。

公钥证书怎么生成的

  • 服务端人员提交公钥向机构申请证书
  • 机构确认无误之后用机构的私钥对公钥进行数字签名,并将该公钥和公钥证书绑定,同时将该证书事先植入浏览器
  • 机构转交证书给服务端,服务端用该证书发送给客户端
  • 客户端通过公钥向机构验证签名,确认服务器证书的真实性
  • 确认真实之后用该公钥进行通信

3. 常见的网络攻击

xss 跨站脚本攻击

  • 原理: 向网站插入可执行脚本,发给用户钓鱼链接,获取用户个人信息
  • 防御: 对输入的可执行脚本字符串化,并对敏感字符进行必要的转义操作

csrf 跨站请求仿造

  • 原理: 用户未及时退出登录,获取到用户的token,并仿造用户请求网站来完成支付 转账等危险操作
  • 防御:
    • cookie 设置 httponly,浏览器上无法获取cookie
    • 增加临时 token
    • 设置请求 referer 白名单校验

文件上传漏洞

  • 原理:利用文件类型没有很好的校验,上传可执行脚本,然后对服务器进行一定操作,或者诱导外部用户访问该脚本达到攻击目的
  • 防御:
    • 限制文件类型和大小
    • 上传的文件需要重命名,是攻击者无法猜到上传之后的文件名

ddos 攻击

  • 原理: 同一时刻利用数量庞大的计算机群对一个或多个目标发起攻击导致其瘫痪
    • syn 攻击: 在 tcp 三次握手时,一直卡在第三步 让服务器处于半链接状态,以至于占满服务器的等待队列 让真正的 tcp 连接无法建立
    • 攻击 cdn 服务器
    • cc 攻击基于 http 服务避开缓存,请求目标服务器,需要进行访问数据库查询或者一次查询返回大量数据的时候,降低服务器的响应速度,加速系统资源的消耗,从而拖垮后端的业务处理系统
  • 防御:
    • 增加带宽硬防护,提升 cpu 内存 硬盘 网卡 路由器 交换机等硬件设施的配置
    • 如果是单个主机,及时修复系统漏洞并升级安全补丁
    • 是用负载均衡将请求均衡分配到各个服务器,减少单个服务器的负担
Prev
2023-10-23 21:41:55 # fontend
Next