Open suukii opened 4 years ago
在第三方网站中,攻击方是如何发起跨站请求的呢?一般有以下几种常见的方式:
一般会利用 img
标签,
<img src="http://bank.example/withdraw?amount=10000&for=hacker" />
用户打开带有这个 img
元素的网站时,浏览器就会自动发起一个 HTTP 请求 http://bank.example/withdraw?amount=10000&for=hacker
,如果用户在 bank.example
已经登录过了,这个请求就会带上 bank.example
的 Cookie。
如果服务器没有相应的验证机制,它会认为这是一个正常用户的请求,从而执行其中指定的操作,攻击者达成攻击目的。
通常是以一个自动提交的表单的形式。攻击方可能自己填写了一个表单,再加上一段自动提交表单的脚本:
<form id='hacker-form' action="https://xxx.com/info" method="POST">
<input type="hidden" name="user" value="hhh" />
<input type="hidden" name="count" value="100" />
</form>
<script>document.getElementById('hacker-form').submit();</script>
用户访问该页面时,表单就会自动提交,相当于冒充用户提交了一次 POST 请求,这个请求也会带上被攻击网站的 Cookie。
攻击方可能会把请求放在 <a>
标签中,然后利用夸张的文字诱导用户点击,用户点击后,就与 自动发 GET 请求
同理了。
Same-Site 属性有以下 3 个值:
如果攻击者的 CSRF 请求没有携带相应的 Cookie,就会被服务器拒掉了。
利用 Referer
和 Origin
请求头字段确定请求的来源域名:
如果服务器发现了来自非可信赖域名的请求,就可以不予响应,但是,这两个字段在某些情况下可能不存在,而且还可以伪造,并不是十分可靠。
概念
Cross-site request foregery,跨站请求攻击,指的是攻击方诱导用户进入第三方网站(可能是攻击方自己的网站,也可能是其他网站),在第三方网站中,利用用户在被攻击网站的登录状态,向被攻击网站发起跨站请求,绕过被攻击网站后台的用户验证,达到冒充用户对被攻击网站进行某项操作的目的。
CSRF 的攻击原理是诱导用户跳转到新的页面,利用服务器的验证漏洞和用户之前的登录状态来冒充用户进行操作。
CSRF 一般流程