浏览器安全

页面白屏

首页白屏的原因是打包后的js和css文件过大,浏览器初始访问网站时,会先加载该项目的js和css文件,加载完成后才会进行页面渲染。如果打包的文件过大,加载时间就会变长,出现视觉上的页面白屏.

①使用懒加载,打包后才根据路由生成多个js和css文件,当访问到对应的路由时,才加载对应的文件。在移动端页面的首页时,先加载可视区域的内容,剩下的内容等它进入可视区域后再按需加载。

静态资源缓存

静态资源长期不需要修改的,使用强缓存,设置Cache-Control实现,设置Cache-Control:max-age=31536000,浏览器在一年内直接使用本地缓存文件,不向服务器发送请求。

资源随时变动,设置ETag实现协商缓存,初次请求资源时,设置ETag,并返回200,之后请求时带上If-none-match字段,询问服务器当前版本是否可用。

③SSR

服务端渲染,在服务端将渲染逻辑处理好,然后将处理好的HTML直接返回给前端展示,可以解决白屏问题。

④预渲染

利用webpack的插件prerender-spa-plugin做预渲染

动态数据无法展示,不同的用户看到的都是同样的页面

路由很多时,代码构建时间太长

用户容易误操作,由于预渲染时js还没有加载,因此展示出来的内容没有js的交互逻辑,比如按钮点击,在js加载完成之前用户点击是没有反应的

预加载内容很少,当页面有内容是依赖动态数据加载时,在编译时是无法加载出动态数据的,因此会导致这部分内容编译不出来

骨架屏

⑤骨架屏

意义:骨架屏就是在页面尚未加载之前先给用户展示页面的大致结构,在骨架页面中,图片、文字、图标都将通过灰色矩形块或圆形块显示,直到页面请求数据后渲染页面。

原理:

通过puppeteer在服务端操控headless Chrome打开开发中的需要生成骨架页面的页面,在等待页面加载渲染完成之后,保留页面布局样式的前提下,通过对页面中元素进行删减或增添,通过样式覆盖,使其展示为灰色块。

骨架屏的实现原理和预加载类似,都是利用了Puppeteer爬取页面的功能,Puppeteer是chrome出的一个headlessChromenode库,提供了API可以抓取SPA并生成预渲染内容,和预加载不太一样的是骨架屏技术会在Puppeteer生成内容后,利用算法将生成的内容进行替换,生成骨架页面,page-skeleton-webpack-plugin是一个用来生成骨架屏的webpack插件

cookie和session如何协同

session的底层是基于cookie实现的。

①浏览器没有cookie,向服务器发送请求

②服务器接受到请求,通过request.getSession()方法创建会话对象(第一次创建的是session会话)

服务器每次创建session的时候,也会创建cookie,这个cookie的key是jessionid,value为创建的session的ID。

③通过响应将新创建的session的ID放在cookie里,传递给浏览器。

④浏览器解析获取到的数据,就马上创建一个cookie对象。有了cookie后,再次请求服务器,就会把含有session的ID的cookie传给服务器。

⑤服务器通过request.getSession()方法,通过cookie中session的ID,找到之前创建好的session对象,返回相应数据。

xss攻击可以造成:

1.窃取cookie信息

2.可以监听用户行为

3.可以通过修改dom伪造假的登录窗口,骗取用户输入用户名和密码

4.生成浮窗广告,影响用户体验

如何阻止xss攻击?

1.服务器对输入脚本进行过滤或转码

2.充分利用CSP

1)限制加载其他域下的资源文件

2)禁止向第三方提交数据,这样用户的数据也不会外泄

3)禁止执行内联脚本和未授权的脚本

4)还提供了上报机制,这样可以帮助我们尽快发现有哪些xss攻击,以便尽快修复问题

3.使用httponly属性

4.验证码:防止脚本冒充用户提交危险操作

5.限制长度:对于一些不信任的输入,可以限制其输入长度

CSRF攻击

和 XSS 不同的是,CSRF 攻击不需要将恶意代码注入用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。

三个必要条件:

1.目标站点一定要有 CSRF 漏洞;

2.用户要登录过目标站点,并且在浏览器上保持

有该站点的登录状态;

3.需要用户打开一个第三方站点,可以是黑客的

站点,也可以是一些论坛;

如何防止CSRF攻击?

1. 充分利用好 Cookie 的 SameSite 属性

Strict 最为严格,浏览器会完全禁止第三方

Cookie。

链接打开、 Get 方式的表单携带 Cookie。 Lax 相对宽松一点。

None ,在任何情况下都会发送 Cookie 数据。

2. 验证请求的来源站点

3. CSRF Token

第一步,在浏览器向服务器发起请求时,服务器生成一个 CSRF Token。

第二步,在浏览器端如果要发起转账的请求,那么需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法。

4.X-FRAME-OPTIONS

DENY,表示页面不允许通过iframe方式展示

AMEORIGIN,相同域名可以·通过ifame展示

ALLOW-FROM,可以在指定来源中的iframe展

你可能感兴趣的:(浏览器安全)