网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
作为前端开发首要了解其中两个, 在恶意攻击中也是比较常见: 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的内容。
网友评论