suukii / fe-interview

前端面试题整理
5 stars 0 forks source link

什么是 XSS #26

Open suukii opened 4 years ago

suukii commented 4 years ago

概念

全称是 Cross-Site Scripting(跨站脚本攻击),是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户浏览器中运行,从而获取用户的敏感信息如 Cookie 和 SessionID 等,或者利用这些信息冒充用户向网站发起攻击者定义的请求。

XSS 的本质是:恶意代码未经过滤,和网站正常的代码混在一起,浏览器无法分辨哪些是可信脚本,哪些是恶意脚本,导致恶意脚本被执行。

攻击来源

在处理输入时,以下内容都不信:

XSS 分类

suukii commented 4 years ago

存储型 XSS

常见于带有用户保存数据的网站功能,比如论坛的发帖功能,商品评论等,用户的输入会被提交到服务器并保存到数据库中,攻击的步骤如下:

suukii commented 4 years ago

反射型 XSS

反射型 XSS 和存储型 XSS 的区别是:

反射型 XSS 攻击一般是利用 URL 传递参数的功能,比如网站的搜索或者跳转,攻击步骤如下:

suukii commented 4 years ago

DOM型 XSS

DOM型 XSS 的攻击步骤是:

DOM型 XSS 与前两种 XSS 的不同在于,在 DOM型 XSS 中,取出和执行恶意代码这两个步骤都发生在用户浏览器,属于前端 JavaScript 自身的安全漏洞,而前两种 XSS 则属于服务端的安全漏洞。

suukii commented 4 years ago

防御存储型和反射型 XSS 攻击

这两种攻击都是从在服务端取出恶意代码后,插入到响应的 HTML 中,导致浏览器在解析 HTML 的过程中执行了恶意代码,所以要防御这两种攻击,就要隔绝恶意代码被插入 HTML 的可能,一般有两种常用的防御手段:

  1. 改为纯前端渲染,将代码和数据分隔开(适合内部、管理系统之类的网站)
  2. 对输出的 HTML 进行充分的转义(适合对性能要求高或者有 SEO 需求的网站)

纯前端渲染的过程

转义 HTML

要使用专业的转义库,对 HTML 模板中的各处插入点都进行充分的转义

suukii commented 4 years ago

防御 DOM 型 XSS 攻击

DOM 型 XSS 攻击实际上是前端的 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。

suukii commented 4 years ago

其他 XSS 防范措施

suukii commented 4 years ago

避免漏洞产生