说到CSRF,很多小伙伴应该都很清楚。他们不清楚也没关系。下面来讨论一下。
跨站请求伪造(英文:Cross-site request forgery),也称为一键攻击或会话骑行,通常缩写为CSRF或XSRF,这是一种迫使用户对当前登录的Web应用程序执行无意操作的攻击方法。与跨站脚本(XSS)相比,XSS利用用户对指定网站的信任,而CSRF利用网站对用户网络浏览器的信任。
以上内容来自百度百科。
那么我们来详细讨论一下跨站点请求伪造:
跨站请求攻击,简单来说就是攻击者通过一些技术手段,欺骗用户的浏览器访问一个他已经认证的网站,并运行一些操作(如发送邮件、发送消息,甚至是转账、购买商品等属性操作)。因为浏览器已经过认证,访问过的网站会被当作真实用户操作运行。这就利用了web中用户认证的一个漏洞:简单的认证只能保证请求来自用户的浏览器,而不能保证请求本身是用户自愿做出的。
理解CSRF攻击的最佳方式是看一个具体的例子。
假设您的银行网站提供了一个表单,允许资金从当前登录的用户转移到另一个银行帐户。例如,转移表单可能如下所示:
<form method = "post" action = "/transfer" ><input type = "text" name = "amount" /><input type = "text" name = "routingNumber" /><input type = "text" name = "account" /><输入类型= “提交” 值= “传输” /></form>
相应的HTTP请求可能如下所示:
传输HTTP请求
POST/transport HTTP/1.1
主持人:bank.example.com
Cookie:JSESSIONID=randomid
类型:application/x-***-form-urlencoded
amount = 100.00 & routing number = 1234 &账户=9876
现在假设你认证了银行网站,然后不注销就访问了一个邪恶的网站。邪恶网站包含以下格式的HTML页面
邪恶转移形态
<form method = "post" action = "https://bank.example.com/transfer" ><input type = "hidden" name = "amount" value = "100.00" /><input type = "hidden" name = "routingNumber" value = "evilsRoutingNumber" /><input type = "hidden" name = "account" value = "evilsAccountNumber" /><input type = "submit" value = "Win Money!" /></form>
你喜欢赢钱,所以你点击提交按钮。在此过程中,您无意中向恶意用户转移了100美元。这样做的原因是,尽管恶意网站看不到您的cookie,但与您的银行相关联的cookie仍然会随请求一起发送。
最糟糕的是,这整个过程可以用JavaScript自动完成。这意味着你甚至不需要点击按钮。此外,当访问成为XSS攻击受害者的诚实网站时,很容易发生这种情况。那么我们如何保护我们的用户免受这种攻击呢?
那么,我们有什么办法可以解决或避免这种CSRF袭击呢?请留下你的看法。
本文来自眼泪是回忆的常客投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/522179.html