美文网首页
前端必须了解的 XSS 和 CRSF 攻击 / 防御

前端必须了解的 XSS 和 CRSF 攻击 / 防御

作者: 酷酷的凯先生 | 来源:发表于2020-06-19 13:33 被阅读0次

网络安全是指网络系统的硬件软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。

作为前端开发首要了解其中两个, 在恶意攻击中也是比较常见: XSS攻击CSRF攻击

第一种: XSS攻击

什么是XSS攻击?

跨站脚本攻击(Cross Site Scripting)是一种代码注入攻击,为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

XSS 原理是什么?

恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,利用这些信息冒充用户向网站发起攻击者定义的请求。
攻击者向有 XSS 漏洞的网站中输入恶意的 HTML 代码,当其它用户浏览该网站时候,该段 HTML 代码会自动执行,从而达到攻击的目的,如盗取用户的 cookie,session tokens,或者其它敏感的网站信息,破坏页面结构,重定向到其它网站等。

XSS有哪些分类

根据攻击的来源,XSS攻击可以分为存储型(持久性)反射型(非持久型)DOM型 三种。

如何防御 XSS 攻击

(1). 防御 XSS 攻击最简单直接的方法就是过滤用户的输入。

如果不需要用户输入 HTML,可以直接对用户的输入进行 HTML 转义
当用户需要输入 HTML 代码时:更好的方法可能是,将用户的输入使用 HTML 解析库进行解析,获取其中的数据。然后根据用户原有的标签属性,重新构建 HTML 元素树。构建的过程中,所有的标签、属性都只从白名单中拿取。

(2). 通过 验证码、 Referer Check 检查请求是否来自合法的源(可被伪造)。

通用方法:Token 使用Anti-CSRF Token 在URL中保持原参数不变,新增一个参数Token。Token的值是随机的(必须使用足够安全的随机数生成算法,或者采用真随机数生成器),其为用户与服务器所共同持有,可以放在用户的Session中,或者浏览器的Cookie中。尽量把Token放在表单中(构造一个隐藏的input元素),以POST提交,避免Token泄露。

注意:如果网站有XSS漏洞或者一些跨域漏洞,可能导致Token泄露。
在XSS攻击下,读取Token值,然后再构造出一个合法的请求,可以称为:XSRF。

第二种: CSRF攻击

什么是CSRF攻击?

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF 可以简单理解为:攻击者盗用了你的身份,以你的名义发送恶意请求,容易造成个人隐私泄露以及财产安全。

CSRF 原理是什么?

通过html标签请求跨域,并用某种手段骗取目标用户认证状态(例如cookie)信息后进行跨域请求,达到伪造请求的目的 (即 用户登录A网站,并生成 Cookie,在不登出的情况下访问危险网站B)

CSRF有啥特点特点

(1). 攻击通常在第三方网站发起,如图上的站点B,站点A无法防止攻击发生。
(2). 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;并不会去获取cookie信息(cookie有同源策略)
(3). 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等(来源不明的链接,不要点击)

如何防御CSRF攻击?

过滤用户输入的内容不能有效阻挡 CSRF 攻击,我们需要做的事过滤请求的来源,因为有些请求是合法,有些是非法的,所以 CSRF 防御主要是过滤那些非法伪造的请求来源。

首先关键操作只接受 POST 请求, 其次如下

(1). 添加验证码(体验不好)
判断请求的来源:检测Referer(并不安全,Referer可以被更改)

(2). 使用Token(主流)
CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开。

跟验证码类似,只是用户无感知, 具体如下:

  • 服务端给用户生成一个token,加密后传递给用户
  • 用户在提交请求时,需要携带这个token
  • 服务端验证token是否正确
  • Samesite Cookie属性

CSRF 和 XSS 的区别

区别一:CSRF:需要用户先登录网站A,获取 cookie。XSS:不需要登录。
区别二:(原理的区别)
CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

相关文章

网友评论

      本文标题:前端必须了解的 XSS 和 CRSF 攻击 / 防御

      本文链接:https://www.haomeiwen.com/subject/aqcpxktx.html