共计 11616 个字符,预计需要花费 30 分钟才能阅读完成。
浏览器网络相干:
OSI 的七层模型、TCP/IP 四层模型
- TCP 的三次握手(为什么要三次握手,一次呢?四次挥手是什么?)
- 输出 URL 到页面加载实现须要哪几步?
- TCP 和 UDP 的区别
- 报文
- HTTP 的特点?(疾速灵便,为什么用 http 不必其余的?)
- HTTP 有哪些办法?罕用有哪些?
- get 和 post 的区别是什么?
- options 的作用?
- HTTP 状态码?
- http1 和 http2 的区别?
- 讲出至多五种解决跨域的方法,jsonp(写一个繁难 jsonp),CORS
- jsonp 的优缺点?
- http 和 https 的区别
- http 缓存都有哪些,强缓存和协商缓存有什么区别
- localStorage 与 sessionStorage 与 cookie 的区别总结
- 什么是同源策略,为什么呈现跨域问题?申请形式,域名和端口不同
- 什么是事件委托,事件捕捉
- DNS 缓存,原理
- WebSocket 属于什么(简略利用 API),原理
OSI 的七层模型、TCP/IP 四层模型
- TCP 的三次握手(为什么是三次握手,一次呢?四次挥手是什么?)
- 输出 URL 到页面加载实现须要哪几步?
- TCP 和 UDP 的区别
- OSI 的七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP:网络接口层 / 链路层、网络互联层、传输层、应用层。
1.1 TCP 三次握手
https://www.jianshu.com/p/f1b3decb07f8
- 客户端向服务器发送 SYN 包,期待服务器确认;
- 服务器收到 SYN 包,须要确认后向客户端发动一个 SYN 包;
- 客户端收到服务器的 SYN+ACK 包后则向服务器发动确认包,实现三次握手。
为什么不能一次或两次?
因为客户端和服务器都要做好发送数据的筹备后,能力建设通信。避免了服务器端的始终期待而浪费资源。
tcp 是一个全双工的协定,意思是客户端和服务端之间的通信能够同时来回流动,为了保障通信的可靠性以及确定对方能收到本人的申请,tcp 采纳半敞开准则,意思是在收到一个申请后必须发送回复申请,只通信一次或者两次无奈确定对方是否收到申请
- 1.1 四次挥手其性质为终止协定
- TCP 客户端发送一个 FIN,用来敞开客户到服务器的数据传送。
- 服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1。和 SYN 一样,一个 FIN 将占用一个序号。
- 服务器敞开客户端的连贯,发送一个 FIN 给客户端。
- 客户端发回 ACK 报文确认,并将确认序号设置为收到序号加 1。
保证数据接管残缺。
1.2 输出 URL 到页面加载实现须要哪几步?
- 输出网址 URL
- 是 url 还是字符串 搜索引擎
- 缓存机制,判断本地是否有缓存,
- 没有缓存,DNS 解析(解析失去 IP),https 建设 TLS 连贯
- 解析的时候,服务器负载平衡
- TCP 连贯(三次握手)
- 发送 http 申请(申请办法,get、post)
- 承受响应,判断状态码抉择解决形式(返回 http 状态码)
- 判断缓存
- 解码
- 渲染
- 连贯完结(四次挥手)
- 下载 html dom 树,下载 css OM 树,联合 rander 树
参考:https://zhuanlan.zhihu.com/p/34288735
https://mp.weixin.qq.com/s?__…
1.3 TCP 和 UDP 的区别
- TCP:一对一;面向连贯;面向字节流;传输大量数据;速度慢;(web 开发,http)
- 长处:牢靠,通过 TCP 连贯传输的数据无差错、不失落、不反复,并且可能按序达到。
- UDP:一对多;面向非连贯(发送数据前不须要建设连贯);面向报文;传输大量数据,速度快;(利用:直播,视频,应用程序)
- 毛病:不保障交付牢靠,丢包。
报文
1. 申请报文(发送申请的报文):
- 申请头 Request Headers:
- Accept:申请报文可通过一个“Accept”报文头属性通知服务端 客户端承受什么类型的响应。
- Cookie:客户端的 Cookie 就是通过这个报文头属性传给服务端的哦!
- Referer:示意这个申请是从哪个 URL 过去的
- Cache-Control:对缓存进行管制,如一个申请心愿响应返回的内容在客户端要被缓存一年,或不心愿被缓存就能够通过这个报文头达到目标。
- 申请行:
- HTTP 办法,get/post 申请
- HTTP 协定
- 申请体:
2. 响应报文(服务端相应的报文)
状态行,响应首部,内容实体,
HTTP 协定的次要特点?(疾速灵便,为什么用 http 不必其余的?)
http 是超文本传输协定,应用层协定的一种,应用层协定:DNS、FTP、SMTP、HTTP、SNMP、Telnet。
特点:简略疾速灵便,属于应用层的面向对象的协定,基于 TCP 的牢靠传输。
http 是不保留状态的协定(无状态协定)
HTTP 有哪些办法?罕用有哪些?
- GET(获取)
- POST(传输)
- PUT(更新)
- DELETE(删除)
- HEAD(获取报文首部)
- OPTIONS(询问)
- CONNECT
get 和 post 的区别是什么?
- 数据类型:get 只承受 ASCII 字符,而 post 没有限度,容许二进制。
- 后退 / 后退:get 在浏览器回退 / 刷新时是有害的,而 post 会再次提交申请。
- 申请长度:get 长度取决于浏览器窗口的长度,post 长度不限度
- 缓存:get 能被缓存,post 不能。
- 申请次数:get 申请一次(申请头申请体一起发送),post 申请两次(先发送申请头,等 100 continue,而后再发送申请体,连着发送)。
- 安全性:post 比 get 更平安,因为 GET 参数间接裸露在 URL 上,POST 参数在 HTTP 消 https 息主体中,而且不会被保留在浏览器历史或 web 服务器日志中,。
- 编码格局:post 反对多种编码格局 gbk utf-8
- GET 产生一个 TCP 数据包,浏览器会把 http header 和 data 一并发送
- POST 产生两个 TCP 数据包(除了 FireFox)先发送 header, 浏览器响应 100 continue, 浏览器再发送 data
specification:相干的 RFC,
options 的作用?
- 检测服务器所反对的申请办法
- CORS 中的预检申请(检测某个接口是否反对跨域)
HTTP 状态码,http 响应,信息响应?
- 1 结尾:承受持续解决,(100 continue)
- 2 结尾:示意胜利 (200 胜利并返回 201 已创立 202 接管 203 胜利未受权 204 胜利无内容)
- 3 结尾:重定向(301 永恒重定向,302 长期重定向,304 有缓存不必更新)
- 4 结尾:客户端谬误(400 语法错误,403 禁止被拜访,没有权限,404 资源页面不存在)
- 5 结尾:服务端谬误(500 后端服务器挂了,501 服务器不反对无奈解决,502 网关谬误,后盾建设连贯超时,503 服务器外部谬误,504 后盾未建设连贯超时,505 不反对 http 协定版本)
https://mp.weixin.qq.com/s?__…
URI 一个资源文件的不同辨示意办法
- URI:对立资源标识符
- URL:对立资源定位符
- URN:对立资源名称
串行连贯 长久连贯 管道化长久连贯 HTTP2.0 多路复用
- 串行连贯:http1.0 版本,每次发申请都要建设新的 TCP 连贯,每次通信后都要断开 TCP 连贯。
- 长久连贯:http1.1,连段没有提出断开连接,则放弃长久 TCP 连贯。
- 管道化长久连贯: 不必期待响应返回而发送下个申请并按数据返回响应。
- HTTP2.0 多路复用:http2.0
- websocket: HTML5,客户端被动向服务器发申请,建设连贯后。
http1 和 http2 的区别?超文本传输协定
影响一个 HTTP 网络申请的因素次要有两个:带宽和提早。
浏览器为每个域名最多同时保护 6 条 TCP 长久连贯。
影响 http1.1 效率的因素是 TCP 启动慢,多条 TCP 竞争带宽,呈现队头阻塞的问题,为了解决这个问题,http2 采纳通过引进二进制分帧层,多路复用,服务器推送,头部压缩。
1)在 HTTP 1.0 中,客户端的每次申请都要求建设一次独自的连贯,在解决完本次申请后,就主动开释连贯。
2)在 HTTP 1.1 中则能够在一次连贯中解决多个申请,并且多个申请能够重叠进行,不须要期待一个申请完结后再发送下一个申请。采纳了 keep-alive。
http1 的次要问题:
- 第一个起因,TCP 的慢启动,因为三次握手。
- 第二个起因,同时开启了多条 TCP 连贯,那么这些连贯会相互竞争固定的带宽。
- 第三个起因,HTTP/1.1 队头阻塞的问题,只有一个 TCP 管道。
http1.1:
减少了长久连贯;
浏览器每个域名同时保护 6 个 TCP 长久连贯。
毛病:对带宽的利用率不强,(每秒最大发送接管的字节数)
http2:
- 解决方案:要解决一个域名只应用一个 TCP 长连贯和打消队头阻塞问题。
- 长处:能够设置申请的优先级,反对服务器推送,大幅度的晋升了 web 性能。
- 问题:队头阻塞无奈解决,丢包率减少()
区别:http2 采纳通过引入二进制分帧层,
- 多路复用机制(MultiPlexing):在 TLS 层,减少一个二进制分帧层,
TLS 协定是会话层的平安传输协定,
即连贯共享,即每一个 request 都是是用作连贯共享机制的。一个 request 对应一个 id,这样一个连贯上能够有多个 request,每个连贯的 request 能够随机的混淆在一起,接管方能够依据 request 的 id 将 request 再归属到各自不同的服务端申请外面。
- 新的二进制格局(Binary Format),将申请分帧传输,能够进行二进制分帧层,HTTP1.x 的解析是基于文本。基于文本协定的格局解析存在人造缺点,文本的表现形式有多样性,要做到健壮性思考的场景必然很多,二进制则不同,只认 0 和 1 的组合。基于这种思考 HTTP2.0 的协定解析决定采纳二进制格局,实现不便且强壮。
二进制分帧层:分段带 ID 传输。
- 头部压缩,对申请头和响应头进行压缩,减小体积。
- 服务器推送(server push),同 SPDY 一样,HTTP2.0 也具备 server push 性能。
- 设置申请的优先级:
- HTTP2 的长久连贯和管线化:
http3:
HTTP3:基于 UDP 协定推出一个 QUIC 协定,
在 UDP 根底上新增多路复用,0-RTT,应用 TLS1.3 加密,流量管制,有序交付,重传等。
- 防止包阻塞:
- 疾速重启会话:
什么是浏览器同源策略?为什么会呈现跨域问题?(申请形式,域名和端口不同)
- 一种安全策略,爱护本地数据,为了避免 XSS、CSFR 等攻打。
- 同源的定义:协定(申请形式)、域名、端口雷同。因为存在浏览器同源策略,所以才会有跨域问题。
- 同源策略分为两种:
DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里次要场景是 iframe 跨域的状况,不同域名的 iframe 是限度相互拜访的。
XMLHttpRequest 同源策略:禁止应用 XHR 对象向不同源的服务器地址发动 HTTP 申请。
浏览器同源策略:https://www.cnblogs.com/laixiangran/p/9064769.html
理解预检申请嘛?
- 跨域是指一个域下的文档或脚本试图去申请另一个域下的资源
- 避免 XSS、CSFR 等攻打, 协定 + 域名 + 端口不同
- jsonp; 跨域资源共享(CORS)(Access control); 服务器正向代理等
预检申请: 需预检的申请要求必须首先应用 OPTIONS 办法发动一个预检申请到服务器,以获知服务器是否容许该理论申请。” 预检申请“的应用,能够防止跨域申请对服务器的用户数据产生未预期的影响
代理服务器
代理服务器:客户端和服务端之间的中间商,能够作为缓存服务器。
- 正向代理:
- 反向代理:
- 反向代理解决跨域问题:两个服务器之间通信。
本地服务器在浏览器向本地服务发动申请》本地代理转发》指标服务器》响应数据后通过代理伪装成本地服务器申请的返回值》浏览器接管到指标服务器的数据
- vue 的 proxyTable 的作用,解决跨域问题。怎么实现。
与服务器联调的时候 vue.config.js,proxy 设置申请反向代理
缓存服务器:频繁拜访网络内容。进步访问速度。浏览器和原服务器之间的两头服务器。
解决跨域的方法,罕用:
jsonp 跨域:
jsonp 跨域通过 script 的 src 获取 callback 申请资源进行文件的传输,而后返回一个函数调用;
- 长处:兼容性好(兼容 IE)
- 毛病:只反对 get 一种申请,不是官网 API,容易受到 xss 攻打。
- 原理:script 的 src 属性默认反对跨域
跨域资源共享(CORS):批改响应头
- 跨域资源共享(CORS)容许浏览器跨源服务器,须要浏览器和服务器同时反对,须要在服务器上配置 Access-Control-Allow-Origon。
* 不能带 cookie
- 简略申请:申请形式:get、post、head
- 非简略申请:先发一次预检申请(options):put、delete
options 是预检申请,在真正的申请发送进来之前,浏览器会先发送一个 options 申请向服务询问此接口是否容许我拜访
浏览器在以后实在申请是非简略申请且跨域的状况下会发动 options 预检申请
与 JSONP 相比:
- JSONP 只反对 get 申请,cors 反对所有申请(get、post);
- JSONP 支持性好,兼容老版本浏览器。
参考:http://www.ruanyifeng.com/blog/2016/04/cors.html
hash:window.location
hash:location.hash + iframe;
postMessage:
postMessage() 办法容许来自不同源的脚本采纳异步形式进行无限的通信,能够实现跨文本档、多窗口、跨域消息传递。
Awindow.postMessage(data,origin)
A 窗口向 B 窗口发送申请:Awindow.postMessage(‘data’,’http://B.com’)
WebSocket 协定跨域:
WebSocket 协定跨域:HTML5 一种新的长久化协定,用于 H5 聊天,即时线上跨域。
实时聊天,基于 TCP 协定,短轮询,节约带宽,
长轮询,
http 单向数据流,websocket 链接客户端和服务器,在 ws 里
scoket.io
WebSocket 心跳检测
不罕用:
nginx 反向代理接口跨域:
同源策略是浏览器的安全策略,不是 HTTP 协定的一部分。服务器端调用 HTTP 接口只是应用 HTTP 协定,不会执行 JS 脚本,不须要同源策略,也就不存在逾越问题
document.domain + iframe 跨域:
两个页面都通过 js 强制设置 document.domain 为根底主域,就实现了同域. 然而仅限主域雷同,子域不同的跨域利用场景
http 和 https 的区别
http:因为 http 是无状态,明文传输的,容易造成中间人攻打,所以在 http 协定中退出平安层,退出 SSL/TLS 平安层,减少加密 / 解密的形式,相比 http 协定更平安。
SSL/TLS 平安层:对发动 HTTP 申请的数据进行加密操作和对接管到 HTTP 的内容进行解密操作。
TLS/SSL 的性能实现次要依赖于三类根本算法:散列函数、对称加密和非对称加密散列函数,散列算法,MD5
RSA 算法
https:平安,申请工夫长,加载慢,花钱,证书
https 安全性:
- 对称加密:加密和解密应用的密钥是雷同的
- 传输方式:
浏览器:发送加密套件列表和一个随机数 client-random,
服务器:从加密套件列表中选取一个加密套件,还会生成一个随机数 service-random,并将 service-random 和加密套件列表返回给浏览器。最初浏览器和服务器别离返回确认音讯。
- 毛病:容易被破解
- 非对称加密:A、B 两把密钥,公钥,私钥
毛病:效率低,影响速度,无奈保障服务器到浏览器的平安
- 对称加密 + 非对称加密:用非对称加密的形式 传输 对称加密里的密钥,
非对称加密应用时,生成 pre-master(两个随机数计算)。
长处:速度快 + 平安。
- 增加数字证书(生产):向 CA 证书机构申请数字证书,蕴含数字签名,非对称加密的公钥和个人信息。
证书的作用:一个是通过数字证书向浏览器证实服务器的身份,另一个是数字证书外面蕴含了服务器公钥。
证书也有公钥和私钥。证书加密一次,
CA 证书用公钥,hash 值,。
加密套件列表:客户端反对的加密和非对称加密的形式
- 浏览器如何验证数字证书
- 有了 CA 签名过的数字证书,当浏览器向服务器发出请求时,服务器会返回数字证书给浏览器。浏览器接管到数字证书之后,会对数字证书进行验证。
- 首先浏览器读取证书中相干的明文信息,采纳 CA 签名时雷同的 Hash 函数来计算并失去信息摘要 A;而后再利用对应 CA 的公钥解密签名数据,失去信息摘要 B;比照信息摘要 A 和信息摘要 B,如果统一,则能够确认证书是非法的,
- 即证实了这个服务器是极客工夫的;同时浏览器还会验证证书相干的域名信息、无效工夫等信息。
- 区别:
- HTTP 的 URL 以 http:// 结尾,而 HTTPS 的 URL 以 https:// 结尾
- HTTP 是不平安的,而 HTTPS 是平安的
- HTTP 规范端口是 80,而 HTTPS 的规范端口是 443
- 在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 的平安传输机制工作在传输层
- HTTP 无奈加密,而 HTTPS 对传输的数据进行加密
- HTTP 无需证书,而 HTTPS 须要 CA 机构 wosign 的颁发的 SSL 证书
https 是如何加密的?
密钥传输的过程,服务器做了什么事?浏览器做了什么事?密钥怎么传的?对称加密要怎么传?数字证书怎么校验?
常见加密算法有哪些?
浏览器缓存,强缓存和协商缓存有什么区别
https://mp.weixin.qq.com/s/Wvc0lkLpgyEW_u7bbMdvpQ
缓存地位:
- service worker:浏览器背地的独立线程,个别缓存
- memory chache:内存中的缓存,计算机内存
- Disk Cache:硬盘中的内存,速度慢
- Push Cache:推送缓存,http2,只在 session 中存在
- 缓存过程:
- 缓存机制:
- 缓存机制分为:强缓存和协商缓存
- 区别:是否发送申请,强缓存不发送申请,协商缓存至多发送一次申请。
- 优先级:Cache-Control > expires > Etag > Last-Modified
强缓存(本地缓存):不必跟服务器进行通信
- 缓存字段:Expires 和 Cache-Control
- Expires:相对工夫,资源生效的工夫,
- Cache-Control:绝对工夫,资源缓存的最大无效工夫
- Cache-Control 的 max-age 优先级高于 Expires
协商缓存:由服务器来决定是否应用缓存,至多和服务器有一次通信
- 缓存字段:Last-Modified 和 ETag 发送到服务器,确认资源是否更新。
- Last-Modified 示意本地文件最初批改日期
- ETag 是个标识,修没批改
- 判断是否过期,先走 etags(http1 生成的),再走 Last-Modified。ETag 优先级比 Last-Modified 高。
页面怎么进行强缓存和协商缓存?
如果缓存过期了,咱们就能够应用协商缓存来解决问题。协商缓存须要申请,如果缓存无效会返回 304。
协商缓存须要客户端和服务端独特实现,和强缓存一样,也有两种实现形式。
Last-Modified 和 If-Modified-Since
If-Modified-Since 会将 Last-Modified 的值发送给服务器,询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来。
参考:https://zhuanlan.zhihu.com/p/64635421
如果浏览器命中强缓存,则不须要给服务器发申请;而协商缓存最终由服务器来决定是否应用缓存,即客户端与服务器之间存在一次通信。
在 chrome 中强缓存(尽管没有收回实在的 http 申请)的申请状态码返回是 200 (from cache);而协商缓存如果命中走缓存的话,申请的状态码是 304 (not modified)。不同浏览器的策略不同,在 Fire Fox 中,from cache 状态码是 304.
浏览器会获取该缓存资源的 header 中的信息,依据 response header 中的 expires 和 cache-control 来判断是否命中强缓存,如果命中则间接从缓存中获取资源。
如果没有命中强缓存,浏览器就会发送申请到服务器,这次申请会带上 IF-Modified-Since 或者 IF-None-Match, 它们的值别离是第一次申请返回 Last-Modified 或者 Etag,由服务器来比照这一对字段来判断是否命中。IF-None-Match 是 false 时,则服务器返回 304 状态码,
IF-None-Match 是 true 时,走 200
并且不会返回资源内容,浏览器会间接从缓存获取;否则服务器最终会返回资源的理论内容,并更新 header 中的相干缓存字段。
keep-alive:HTTP 长连贯
- 是客户端和服务端的一个约定,如果开启 keep-alive,则服务端在返回 response 后不敞开 TCP 连贯;同样的,在接管完响应报文后,客户端也不敞开连贯,发送下一个 HTTP 申请时会重用该连贯。
- http1.0 默认敞开的,须要在 http 头退出 ”Connection: Keep-Alive”,能力启用 Keep-Alive
- http1.0 默认开启 keep-alive。
- 浏览器默认开启 keep-alive,
http 缓存都有哪些,
https://juejin.im/post/68449036824551096[](https://juejin.im/post/684490…
#heading-38
- http 缓存、websql、indexDB、cookie、localstorage、sessionstorage、application cache、cacheStorage、flash 缓存
localStorage 与 sessionStorage 与 cookie 补充:
https://mp.weixin.qq.com/s?__…
https://zhuanlan.zhihu.com/p/159268611
cookie
localStorage
sessionStorage
存储大小
个别不超过 4K
个别为 5M
个别为 5M
数据有效期
可设置生效工夫,默认敞开浏览器生效
永恒无效,除了手动革除
敞开页面失效
作用域
所有同源窗口共享
所有同源窗口共享
只在同浏览器共享
易用性
须要本人封装,原生的 cookie 接口不敌对
原生接口能够承受,能够封装来对 Object 和 Array 有更好的反对
与服务端通信
每次会随 http 协定头带过来,cookie 保留太多数据会带来性能问题
在申请时应用数据,不参加服务器通信
贮存类型 string
(补充:cookie 通过 http 协定头带过来的)
indexDB 存储大小无下限 贮存类型键值对,不能跨域 时效性
CSRF 攻打 跨站申请伪造
https://mp.weixin.qq.com/s?__…
跨站伪造申请
- 概念:攻击者盗用你的身份,以你的名义发送歹意申请,比方:通过生疏连贯,诱导用户点击。
CSRF 如何产生的?
- 用户信息存在 cookie 中,黑客通过贮存 token
- 如何避免 CSRF 攻打?
- 在服务端做解决,尽量应用 post 申请,退出验证码,验证 Referer
- 应用 Cookie 的 SameSite 属性:strict、lax(绝对宽松)、none
- 验证起源地址:origin(不蕴含门路信息) 和 refer
- 退出 CSRF token:
- 判断申请的起源:检测 Referer(并不平安,Referer 能够被更改)
- CSRF 主动进攻策略:同源检测(Origin 和 Referer 验证)。
- CSRF 主动防御措施:Token 验证 或者 双重 Cookie 验证 以及配合 Samesite Cookie。
- 保障页面的幂等性,后端接口不要在 GET 页面中做用户操作。
判断 origin,没有再判断验证 refer 字段,申请。
Origin Header
Referer Header
然而 Origin 在以下两种状况下并不存在:
IE11 同源策略:302 重定向:
XSS 攻打 跨站脚本攻打
XSS(Cross-Site Scripting,跨站脚本攻打) 是一种代码注入攻打。攻击者在指标网站上注入恶意代码,当被攻击者登陆网站时就会执行这些恶意代码,这些脚本能够读取 cookie,session tokens,或者其它敏感的网站信息,对用户进行钓鱼欺诈,甚至发动蠕虫攻打等。
XSS 的实质是:恶意代码未经过滤,与网站失常的代码混在一起;浏览器无奈分辨哪些脚本是可信的,导致歹意脚本被执行。因为间接在用户的终端执行,恶意代码可能间接获取用户的信息,利用这些信息假冒用户向网站发动攻击者定义的申请。
类型:
- 反射型 XSS:通过 URL 传递参数,当用户点击一个歹意链接,或者提交一个表单,或者进入一个歹意网站时,注入脚本进入被攻击者的网站。Web 服务器将注入脚本,比方一个错误信息,搜寻后果等,未进行过滤间接返回到用户的浏览器上。
- 如何进攻:本义对 url 的查问参数进行本义后再输入到页面。
- DOM 型 XSS:html,前端代码不标准。
- 如何进攻:本义图片链接。
- 存储型 XSS:数据库,将恶意代码提交到指标网站的数据库中。
- 如何进攻:服务器接管到数据,在存储到数据库之前,进行本义 / 过滤、
- SQL 注入:
如何让预防 xss 攻打?
- 服务端过滤做验证,在服务端应用 HTTP 的 Content-Security-Policy 头部来指定策略,或者在前端设置 meta 标签;
- 服务端设置 CSP:开启白名单
- 后端设置 HttpOnly:HttpOnly 解决的是 XSS 后的 Cookie 劫持攻打,只能升高受损范畴
- 对输出的内容和长度做限度:只能减少 XSS 攻打的难度。
jsonp 过滤同域的代码有破绽
点击劫持
点击劫持:攻击者将须要攻打的网站通过 iframe 嵌入本人的网页中,诱导用户点击,暗藏了一个通明的 iframe,用外层假页面诱导用户点击。
进攻方法:
- deny
- frame busting
- 应用 X -Frame-Options 协定头:微软提供,用来进攻利用 iframe 嵌套的点击劫持攻打
- same origin:同源下的 iframe
- allow-from-origin:
中间人攻打
https 对称加密,非对称加密,混合加密,证书最为无效避免中间人攻打。
https://blog.csdn.net/oZhuZhiYuan/article/details/106650944
cookie session token,为什么能通过 cookie 攻打,不能通过 token 攻打
https://mp.weixin.qq.com/s/diaE6WkB_UJxjuhLS9E20Q
- cookie 存在浏览器 session 存在服务器 token 明文传输,没有固定寄存的中央
- cookie 不是很平安,session 更平安。cookie 容易被攻打。
- 设置 cookie 工夫过期,应用 session-destory 销毁对话。
- 发送申请时会带 cookie,不会主动带 token
- token 存储在 cookie 中,token 能够进攻 csrf 攻打
- xss 攻打
- token 如何进行加密?
垃圾回收
V8 实现了精确式 GC,GC 算法采纳了分代式垃圾回收机制。因而,V8 将内存(堆)分为新生代和老生代两局部。
新生代:
- 存活工夫短,应用 Scavenge GC 算法
- 内存空间:from 空间和 to 空间。
- 三次折叠持续应用的放在老生代里
- 清理的过程:对象区域和闲暇区域进行翻转。
- 新申明放在对象区,应用频率比拟低的放在闲暇区
老生代:
- 存活工夫长且数量多,应用:标记革除算法和标记压缩算法。
- to 空间(占比大小超过 25%),标记整顿算法。
- 对象树形构造,依据援用指向 被调用的对象 没有被标记的会被革除。
- 空间不间断的会整合。
怎么解决全进展?
- 垃圾清理走的主线程,清理垃圾会造成卡顿,为了避免卡顿,会将垃圾分为很多份清理。逐步插在主线程内。
为了升高老生代的垃圾回收而造成的卡顿,V8 将标记过程分为一个个的子标记过程,同时
让垃圾回收标记和 JavaScript 应用逻辑交替进行,直到标记阶段实现,咱们把这个算法称
为增量标记(Incremental Marking)算法。
跨标签页通信
内存透露
1. 全局变量引起
2. 闭包
3.dom 清空,事件没有革除
4. 子元素存在援用
子元素还存在援用时,先把子元素开释再开释父元素,否则父元素无奈开释。
被忘记的计时器
如何防止内存透露
1.ESLint 检测代码查看非冀望的全局变量。
2. 应用闭包的时候,得晓得闭包了什么对象,还有援用闭包的对象何时革除闭包。最好能够防止写出简单的闭包,因为简单的闭包引起的内存透露,如果没有打印内存快照的话,是很难看进去的。
3. 绑定事件的时候,肯定得在失当的时候革除事件。在编写一个类的时候,举荐应用 init 函数对类的事件监听进行绑定和资源申请,而后 destroy 函数对事件和占用资源进行开释。
全局变量 没有被申明
无奈被回收 属于内存透露
没有开释的内存
- 事件冒泡、事件捕捉、事件委托:https://www.jianshu.com/p/9c279d7330c6