前言
俗话说:“”有制造者“,“必然有破坏者”。 前端web应用上线之后,不免有不怀好意的破坏者通过各种漏洞攻击你的应用,所以无论前端后端都不是一堵密不透风的墙,当然咱只了解前端哈。下面我们就来了解一下前端存在的安全问题XSS攻击。
一、XSS (跨站脚本攻击)
1.简介
XSS 是跨站脚本攻击,是一种代码注入的攻击。攻击者通过向网站注入恶意代码,当用户登录网站时就会执行这些代码,以此来获取网站的cookie,token等网站敏感信息,对用户进行钓鱼欺诈等
2.分类
存储型XSS :将恶意代码提交到目标网站的数据库中永久存储,当用户访问网站时,从数据库取出恶意代码与HTML 拼接在一起返回给浏览器,浏览器在收到响应后解析执行,混在其中的恶意代码也同时被执行,从而达到攻击目的。
反射型XSS :攻击者构造出带有恶意代码的URL,当用户点击带有恶意代码的URL时,服务端将恶意代码取出后,与HTML拼接在一起返回给浏览器,浏览器在收到响应后解析执行,混在其中的恶意代码也同时被执行,从而达到攻击目的。(与存储型XSS的区别就是恶意代码存放在URL上,而存储型CSS恶意代码存放在数据库中)
DOM型XSS:这种攻击与反射型XSS、存储型XSS在原理上有本质区别,它的攻击代码不需要服务器解析响应,触发XSS靠的是浏览器的DOM解析。客户端上的JS可以访问浏览器的DOM并修改页面的内容,直接从浏览器获取数据并执行。在客户端直接输出DOM内容的时候极易触发DOM型XSS攻击。例如:document.getElementByld(“x’).innerHTML、document.write)等。
3.防御方式
-
一切用户的输入皆不可信,在输出时进行验证
-
将HTML 元素内容、属性以及 URL 请求参数、 CSS值进行编码
-
设置 Cookie 的 HttpOnly 属性
-
数据存储数据库前,展示到页面前均进行转义过滤
二、CSRF (跨站请求伪造)
1.简介
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的
一个典型的CSRF攻击有着如下的流程:
- 受害者登录a.com,并保留了登录凭证(Cookie)
- 攻击者引诱受害者访问了b.com
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
- a.com以受害者的名义执行了act=xx
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作
2.CSRF的特点
-
攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生
-
攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据
-
整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”
-
跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪
3.防御方式
-
阻止不明外域的访问:同源策略 和 Samesite Cookie
-
提交时要求附加文本域才能获取的信息: CSRF Token 和 双重Cookie验证