浏览器原理面试题 前端「前端面试进阶之浏览器原理」( 二 )


使用 CSP,CSP 的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击 。
CSP 指的是内容安全策略 , 它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行 。我们只需要配置规则,如何拦截由浏览器自己来实现 。
通常有两种方式来开启 CSP,一种是设置 HTTP 首部中的 Content-Security-Policy,一种是设置 meta 标签的方式
对一些敏感信息进行保护 , 比如 cookie 使用 http-only , 使得脚本无法获取 。也可以使用验证码,避免脚本伪装成用户执行一些操作 。
3. 什么是 CSRF 攻击?
(1)概念
CSRF 攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求 。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作 。
CSRF 攻击的本质是****利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充 。
(2)攻击类型
常见的 CSRF 攻击有三种:
GET 类型的 CSRF 攻击,比如在网站中的一个 img 标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交 。
POST 类型的 CSRF 攻击,比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单 。
链接类型的 CSRF 攻击,比如在 a 标签的 href 属性里构建一个请求,然后诱导用户去点击 。
4. 如何防御 CSRF 攻击?
CSRF 攻击可以使用以下方法来防护:
进行同源检测,服务器根据 http 请求头中 origin 或者 referer 信息来判断请求是否为允许访问的站点,从而对请求进行过滤 。当 origin 或者 referer 信息都不存在的时候,直接阻止请求 。这种方式的缺点是有些情况下 referer 可以被伪造,同时还会把搜索引擎的链接也给屏蔽了 。所以一般网站会允许搜索引擎的页面请求,但是相应的页面请求这种请求方式也可能被攻击者给利用 。(Referer 字段会告诉服务器该网页是从哪个页面链接过来的)
使用 CSRF Token 进行验证 , 服务器向用户返回一个随机数 Token,当网站再次发起请求时,在请求参数中加入服务器端返回的 token,然后服务器对这个 token 进行验证 。这种方法解决了使用 cookie 单一验证方式时 , 可能会被冒用的问题,但是这种方法存在一个缺点就是,我们需要给网站中的所有请求都添加上这个 token,操作比较繁琐 。还有一个问题是一般不会只有一台网站服务器 , 如果请求经过负载平衡转移到了其他的服务器,但是这个服务器的 session 中没有保留这个 token 的话,就没有办法验证了 。这种情况可以通过改变 token 的构建方式来解决 。
对 Cookie 进行****双重验证,服务器在用户访问网站页面时,向请求域名注入一个Cookie , 内容为随机字符串,然后当用户再次向服务器发送请求的时候 , 从 cookie 中取出这个字符串,添加到 URL 参数中,然后服务器通过对 cookie 中的数据和参数中的数据进行比较,来进行验证 。使用这种方式是利用了攻击者只能利用 cookie,但是不能访问获取 cookie 的特点 。并且这种方法比 CSRF Token 的方法更加方便 , 并且不涉及到分布式访问的问题 。这种方法的缺点是如果网站存在 XSS 漏洞的 , 那么这种方式会失效 。同时这种方式不能做到子域名的隔离 。
在设置 cookie 属性的时候设置 Samesite,限制 cookie 不能作为被第三方使用,从而可以避免被攻击者利用 。Samesite 一共有两种模式,一种是严格模式,在严格模式下 cookie 在任何情况下都不可能作为第三方 Cookie 使用,在宽松模式下,cookie 可以被请求是 GET 请求,且会发生页面跳转的请求所使用 。