网络随笔(一)

200 阅读3分钟

浏览器本地存储:Cookie \ WebStorage \ IndexeDB

WebStorage :分为LocalStorage 和 sessionStorage

Cookie(状态存储):

最开始的设计目的是为了弥补HTTP在状态管理上的不足,HTTP本身是一个无状态协议:客户端发送请求给服务器,服务器响应,就没了,下次请求,服务器并不知道客户端是谁

想同一个域名下发送请求,都会携带相同的Cookie,服务器拿到Cookie进行解析,便能拿到客户端的状态

  1. 容量缺陷,上限只有4KB
  2. 性能缺陷,Cookie紧跟域名,不管需不需要,都会携带,造成一些性能浪费
  3. 安全缺陷,纯文本形式的Cookie 在客户端和服务器之间传递,很容易被截获,在有效期内可以重新发送给服务器。HttpOnly为false的情况下,Cookie信息可以直接通过JS读取
LocalStorage:
  1. 容量,上限是5MB,仅对于同一个域名持久存储
  2. 只存在客户端,默认不参与客户端和服务器之间的通信,避免性能和劫持安全问题
  3. 接口封装,setItem  getItem 进行操作
应用场景:存储一些内容稳定的资源,比如官网的logo图片文件


sessionStorage:

  • 容量。容量上限也为 5M。
  • 只存在客户端,默认不参与与服务端的通信。
  • 接口封装。除了sessionStorage名字有所变化,存储方式、操作方式均和localStorage一样。
sessionStoragelocalStorage有一个本质的区别,那就是前者只是会话级别的存储,并不是持久化存储。会话结束,也就是页面关闭,这部分sessionStorage就不复存在了。


IndexedDB:

是运行在浏览器的非关系型数据库,本质上是一个数据库,理论上容量没有上限

  1. 键值对存储。内部采用对象仓库存放数据,在这个对象仓库中数据采用键值对的方式来存储。
  2. 异步操作。数据库的读写属于 I/O 操作, 浏览器中对异步 I/O 提供了支持。
  3. 受同源策略限制,即无法访问跨域的数据库。

从输入URL到页面呈现发生了什么?

网络请求阶段:

  1. 构建请求:浏览器会先构建请求行:GET / HTTP/1.1
  2. 查找强缓存 :先检查强缓存,命中直接执行,否则进入下一步
  3. DNS解析: 浏览器有提供DNS数据缓存,如果缓存中有,会直接走缓存,如果没有指定端口,默认采用对应IP的80端口
  4. 建立TCP链接:TCP 传输控制协议 面向链接的,可靠的,基于字节流的传输层通信协议
    TCP的三次握手:

  5. 发送HTTP请求:请求行、请求头、请求体
网络响应
  1. 响应行、响应头、响应体:由HTTP协议版本、状态码、状态描述组成
  2. keep-alive

XSS攻击

  1. 窃取Cookie
  2. 监听用户行为,比如输入了账号密码信息直接发送给黑客服务器
  3. 修改DOM伪造登录表单
  4. 在页面生成悬浮广告
分为:存储型、反射型、文档型

存储型:恶意脚本存储到服务端的数据库,然后客户端执行脚本,从而达到攻击效果

常见场景:留言评论区提交一段脚本代码,如果前后端没有做好转义的工作,那评论内容存到了数据库,在页面直接执行

反射型:恶意脚本作为网络请求的一部分

文档型:在数据传输的过程中劫持到网络数据包,然后修改了里面的html文档

比如:WiFi路由器劫持、本地恶意软件等

解决:不要相信客户端的输入,转义,过滤等

利用CSP和HttpOnly属性

CSRF攻击

利用服务器的验证漏洞用户之前的登录状态来模拟用户进行操作。

诱导点击图片或链接,自动发送GET、POST请求、诱导发送请求

防范措施:

利用Cookie的SameSite属性:strict lax none