浏览器安全-面试专题

45 阅读6分钟

前言

复习浏览器安全板块

分为:

  • XSS攻击
  • CSRF攻击
  • 一些面试题

XSS攻击

什么是XSS攻击

跨站脚本攻击,恶意代码注入的攻击。攻击者通过注入一些恶意代码,使之在用户浏览器运行,来盗取用户的cookie信息。

本质:恶意代码和正常代码混合在了一起,导致浏览器无法辨别。

攻击类型

攻击类型分为:存储型、反射型和 DOM 型。

  1. 存储型:恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行,常见的会在论坛发帖、商品评论、⽤户私信中出现。
  2. 反射型:诱导用户访问一个带有恶意代码的 URL后,服务器端接收数据后处理,然后把带有恶意代码的数据发送到浏览器端,浏览器端解析这段带有 XSS 代码的数据后当做脚本执行,最终完成 XSS 攻击。常⻅于通过 URL 传递参数的功能,如⽹站搜索、跳转等。
  3. DOM型:修改页面的 DOM 节点形成的 XSS。取出和执⾏恶意代码由浏览器端完成,属于前端JavaScript ⾃身的安全漏洞,⽽其他两种 XSS 都属于服务端的安全漏洞。

预防XSS攻击

  1. 浏览器方面进行预防:不使用服务器渲染,对数据的获取和拼接字符串的时候要对可能出现恶意代码进行判断
  2. 使用CSP:建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。

开启CSP

  1. 设置 HTTP 首部中的 Content-Security-Policy
  2. meta 标签的方式<meta http-equiv="Content-Security-Policy">
  1. 对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。

CSRF攻击

跨站请求伪造攻击,就是引诱用户进入一个攻击者创造的第三方网站(一般这个网站和用户现在浏览的网站高度相似,导致用户无法辨别),在该网站中,攻击者会利用用户在原网站的登录状态(绕过用户验证)发起一些跨站的请求,冒充用户向服务器执行一些操作。

这个攻击并没有放置一些恶意的代码,而是利用服务器端的漏洞和用户的登录状态来攻击

攻击类型

攻击类型分为:GET 类型,Post类型,引诱用户点击链接类型:

  1. GET类型:比如在网站中的一个 img 标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交。
  2. Post类型:比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单。
  3. 引诱用户点击链接类型:比如在 a 标签的 href 属性里构建一个请求,然后诱导用户去点击。

预防CSRF攻击

  1. 设置 cookie 属性的时候设置 Samesite ,限制 cookie 不能作为被第三方使用
  2. 使用 CSRF Token 进行验证:服务端向用户返回一个随机token,每次请求的时候携带他来进行验证是否为该用户
  3. Cookie 进行 双重验证:服务器在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从 cookie 中取出这个字符串,添加到 URL 参数中,然后服务器通过对 cookie 中的数据和参数中的数据进行比较,来进行验证。

面试题

下面的几道面试题

什么是中间人攻击

是一种会话劫持攻击。攻击者作为中间人,劫持通信双方会话并操纵通信过程,而通信双方并不知情,从而达到窃取信息或冒充访问的目的。

假设您来到一家咖啡馆,使用笔记本电脑搜索到一个咖啡馆名字的Wi-Fi接入点,顺利连接上网,然后您开始登录各种在线系统。浏览器提示连接不安全的信息,但是您并没有注意,选择继续访问,此时可能中间人攻击已经发生。您的一举一动都在攻击者监视之下,账号、家庭住址、邮箱等个人信息都将被攻击者截获。

攻击过程如下:

  • 客户端发送请求到服务端,请求被中间⼈截获
  • 服务器向客户端发送公钥
  • 中间⼈截获公钥,保留在⾃⼰⼿上。然后⾃⼰⽣成⼀个伪造的公钥,发给客户端
  • 客户端收到伪造的公钥后,⽣成加密hash值发给服务器
  • 中间⼈获得加密hash值,⽤⾃⼰的私钥解密获得真秘钥,同时⽣成假的加密hash值,发给服务器
  • 服务器⽤私钥解密获得假密钥,然后加密数据传输给客户端

引起前端安全问题有哪些

  1. XSS攻击
  2. CSRF攻击
  3. iframe滥用:iframe中的内容是由第三⽅来提供的,攻击者可以通过在iframe插入任何内容来实现攻击
  4. 恶意第三⽅库:其中可能被植入恶意代码

网络劫持有哪些,怎样预防

  1. DNS劫持(输⼊京东被强制跳转到别的网站这就属于dns劫持):域名劫持,是攻击者利用缺陷对用户的DNS进行篡改,将域名由正常IP指向攻击者控制的IP,从而导致访客被劫持到一个不可达或者假冒的网站,以此达到非法窃取用户信息或者破坏正常网络服务的目的。用于:加广告或者让用户进入钓鱼网站,
  2. HTTP劫持(访问⾕歌但是⼀直有贪玩蓝⽉的⼴告):由于http明⽂传输,运营商会修改你的http响应内容(即加⼴告)

HTTP劫持预防:使用HTTPS来进行加密。

DNS劫持:涉及犯法,所以很少会有DNS劫持。预防如下:

  1. 定期修改域名管理系统平台账号密码
  2. 选择正规专业的DNS服务商,可以获得性能较为强大的域名解析和域名监测服务,及时发现域名异常状态并快速解决。
  3. 安装SSL证书。SSL证书具备服务器身份认证功能,可以使DNS 劫持导致的连接错误情况及时被发现和终止,同时 HTTPS 协议可以在数据传输中对数据进行加密传输,保护数据不被窃取和修改。

总结

感谢观看