网络安全——跨站攻击
CSRF
什么是CSRF
CSRF,中文名叫跨站请求伪造,发生的场景就是,用户登陆了a网站,然后跳转到b网站,b网站直接发送一个a网站的请求,进行一些危险操作,就发生了CSRF攻击!
在发送一个http请求的时候,携带的cookie是这个http请求域的地址的cookie。也就是我在b网站,发送a网站的一个请求,携带的是a网站域名下的cookie!
我们在b网站下,读取cookie的时候,只能读取b网站域名下的cookie,这是cookie的跨域限制。所以要记住,不要把http请求携带的cookie,和当前域名的访问权限的cookie混淆在一起。
CSRF攻击,仅仅是利用了http携带cookie的特性进行攻击的,但是攻击站点还是无法得到被攻击站点的cookie。这个和XSS不同,XSS是直接通过拿到Cookie等信息进行攻击的。
防止CSRF
- 放弃Cookie、使用Token!
- SameSite Cookies
Cookie有一个新的属性——SateSite。能够解决CSRF攻击的问题。
它表示,只能当前域名的网站发出的http请求,携带这个Cookie。
由于这是新的cookie属性,在兼容性上肯定会有问题。 - 服务端Referer验证
header中会带有Referer字段,这个字段代表的是当前域的域名,服务端可以通过这个字段来判断,是不是“真正”的用户请求。当然也存在Referer字段都伪造的情况
XSS
什么是XSS
XSS 是 Cross-site scripting 的简称,通俗来说就是跨站点脚本攻击,即通过在客户端注入可执行脚本的方式来实现攻击。
XSS攻击的注入方式:
- 劫持HTML文件,通过 代码,其中代码的作用是获取当前直播的DOM节点,然后隐藏该元素。当弹幕从黑客端发送到服务器,再从服务器发送到每一个用户的页面上,在没有安全处理的情况下,这一场直播,就在这个页面“结束了”。
这是一个真实的案例,这个案例中发送的那一段代码,就是存储型的XSS攻击,恶意的脚本存储到后端的数据库,然后又传输回到每一个用户的页面,从而发生了攻击。
反射型XSS
恶意脚本不是存储在数据库了,而是出现在URL里
区别反射型XSS攻击和存储型XSS攻击的点是:恶意代码存储的位置DOM型XSS
DOM型的XSS攻击与服务器没有太大的关系,不需要和服务器交互,直接通过HTTP劫持,修改对应的HTML文件来实现恶意代码的注入。
防止XSS
- 转义,通过对不同类型的文本和数据做对应的转义和很好的防止大部分的XSS攻击。
- CSP,通过在HTTP头部添加Content-Security-Policy的字段来实现的
在较为严格的CSP条件下,对XSS攻击的防范有以下的作用:
1.禁止加载外域代码,防止复杂的攻击逻辑;
2.禁止外域提交,网站被攻击后,用户数据不会泄漏;
3.禁止内联脚本执行;
4.禁止未授权的脚本执行;
5.通过CSP的上报功能,便于修复问题。 - HttpOnly,HttpOnly 是 Cookie 的一个属性,在设置Cookie的时候可以对Cookie设置该属性,该属性主要是防止Cookie被JS脚本获取,只能通过Http传输和访问。
参考
面试:彻底理解Cookie以及Cookie安全
前端安全-XSS