CSRF (Cross-site request forgery): 跨站请求伪造
即攻击者盗用了你的身份,以你的名义发送恶意请求
CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!
简单阐述CSRF攻击的思想:
1.user 浏览并登陆信任 网站 A
2.网站A 验证通过,在 user 产生A的Cookie
3.user 在没有登出A网站的情况下,访问危险网站B
4.网站B 要求访问 网站A ,发出一个请求(request)
5.user浏览器根据B的请求带着A的Cookie访问网站A
6.网站A分不清请求是谁发出的,根据Cookie,会以user的权限处理请求,这样网站B就达到了模拟用户操作的目的了。
简单的说,登录了受信任的网站,并在本地生成Cookie,在不登出的情况下,访问危险网站就有可能受到CSRF攻击。
CSRF的防御
CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手比较好。
总的思想就是在客户端页面增加伪随机数。
SameSite属性
Chrome51开始,浏览器的Cookie新增一个SameSite属性,用来防止CSRF攻击和用户追踪
SameSite属性 | describe |
---|---|
Strict | 最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。 |
Lax | 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。 |
None | 网站可以选择显式关闭SameSite 属性 |
导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。
1、<a href="..."></a>
2、<link rel="prerender" href="..."/>
3、<form method="GET" action="...">
// Strict
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
// Lax
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
// None 必须同时设置Secure属性
Set-Cookie: widget_session=abc123; SameSite=None; Secure
XSS(Cross Site Scripting):跨站脚本攻击
即攻击者在web页面插入一些恶意的script代码
当用户浏览页面时,嵌入的script代码会执行,因此达到恶意攻击用户的目的;
反射型:一般指攻击者通过特定方式,诱惑受害者去访问一个恶意代码的URL;(非持久性:攻击方式只有一次性)
存储型:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
DOM-based型: 是基于文档对象模型的XSS