-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如果让你去实现一个 CSRF 攻击你会怎么做? #101
Comments
This was referenced May 14, 2021
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
了解 CSRF
CSRF(Cross-site request forgery)跨站请求伪造,是指攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
攻击流程如下:
一个真实的案例:用户 David 在自己邮箱内点击了黑客恶意伪装的链接。黑客在点击的链接里冒充用户(cookie)向 Gmail 服务器发送邮件自动转发请求,导致 David 的邮件都被自动转发到了黑客的邮箱,从而被黑客利用盗取了用户数据。
CSRF 常见的攻击方式与防护策略
几种常见的攻击方式
1. 自动发起 GET 请求的 CSRF
GET 类型的 CSRF 是最简单的,一般是这样:
攻击者将支付的接口请求隐藏在
img
标签内,在加载这个标签时,浏览器会自动发起img
的资源请求,a.com
就会收到包含受害者登录信息的一次跨域请求如果服务器认为该请求有效的话,就会将 10000 块转移到攻击者的账户上去了
2. 自动发起 POST 请求的 CSRF
这种就是表单提交:
访问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。
3. 引诱用户点击链接的 CSRF
链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:
由于之前用户登录了信任的网站A,并且保存登录状态,只要用户点击了这个超链接,则表示攻击成功
总结:CSRF 的产生的条件
防护策略
1. 利用 Cookie 的 SameSite 属性
通过上面的介绍,我们知道攻击者是利用用户的登录状态来发起 CSRF 攻击,而 Cookie 正是浏览器和服务器之间维护登录状态的一个关键数据,因此要阻止 CSRF 攻击,我们首先就要考虑在 Cookie 问题
通常 CSRF 攻击都是从第三方站点发起的,冒用受害者在被攻击网站的登录凭证,所以我们可以做以下防护:
Cookie 中的 SameSite 属性正是为了解决这个问题的,通过使用 SameSite 可以有效地降低 CSRF 攻击的风险
所以,我们可以将 SameSite 设置为
Strict
或Lax
来解决 Cookie 问题2. 利用同源策略
既然CSRF大多来自第三方网站,那么我们就直接禁止外域(或者不受信任的域名)对我们发起请求
那么该怎么判断请求是否来自第三方站点呢?
在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:
服务器先判断 Origin,如果请求头中没有包含 Origin 属性,再根据实际情况判断是否使用 Referer 值,看是否是同源请求
3. Token 认证
前面讲到CSRF的另一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。
所以,我们可以启用 Token 认证
实现一个 CSRF 攻击
我们已经知道了 CSRF 常见的 3 种攻击方式,然后模拟攻击就很简单了,这里提供一个例子:
攻击页面:
被攻击页面:
代码:https:/sisterAn/web-safe
参考链接
The text was updated successfully, but these errors were encountered: