Xss
是什么
XSS是跨站脚本攻击,是一种代码注入攻击。攻击者通过在用户的浏览器中插入注入恶意脚本,利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
为什么产生
程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行
如何防范
有三个种类,
- 反射型XSS
服务端返回脚本,客户端执行
、 - 储存型XSS
后端存储了非法脚本,并且前端直接显示
- DOM XSS
基于DOM或本地的XSS攻击
一般情况下,前两种是后端RD的责任,而 DOM 型 XSS 攻击不发生在后端,是前端 RD 的责任。
对于 HTML 转义通常只有一个规则,就是把 & < > " ' /
这几个字符转义掉,确实能起到一定的 XSS 防护作用,但并不完善:
'<' 转义为 <
'>' 转移为 >
\ : \\
/ : \/
; : ;
DOM 型 XSS 攻击,实际上就是前端代码不够严谨,把不可信的数据当作代码执行了。
使用.innerHTML、document.write()、v-html时要特别小心,或尽量不适用,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent、.setAttribute() 等。
危害
- 挂马
- 盗取用户cookie,就可以模拟你去做一些事情,删除目标文章,篡改数据,嫁祸等。
- D-DOS攻击(拒绝服务)
- 钓鱼
- 蠕虫式挂马攻击、刷广告、刷流量、破坏网上数据。
CSRF
跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。
利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
- 登录了一个受信任的网站A,并且本地存放了Cookie;
- 在不关闭A的情况下,访问了危险网站B;
攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。
造成的问题包括:个人隐私泄露以及财产安全。
防护策略
通过增强自己网站针对CSRF的防护能力来提升安全性。
- 尽量使用POST,少用get,因为get太容易被人利用了,相对降低被攻击的风险
- 再加入验证码(划一下),让用户输入验证码,或者划一下,能够确保这是一种用户行为,现代化比较智能的验证码,很难破解。
- Referer:
http头上有个字段referer能记录
记录当前请求的来源地址,在后端判断这个refere的值不是当前网页,那么就直接拒绝这个请求。
也可以直接规定只能从某个网页过来,如果不是从某个网页过来,直接拒绝
- Anti CSRF Token 从后端拿csrfToken,放到自己的请求头中,让后端判断。