你的钱为什么被转走,这篇文章告诉你答案(CSRF详解)

简介: 这段时间很多文章标题都是面试官,所以跟个风,这篇文章也以面试官开头,主要内容是关于CSRF。全称叫做Cross-site request forgery,中文全称叫做跨站请求伪造。

一、CSRF是什么?


刚刚已经说了,全称叫做夸张请求伪造,很明显就是和安全有关的一个知识点,意思是攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。


举个例子来解释,你去某网买东西,输入了用户名密码,攻击者在另外一个页面重新使用了你的用户名密码。比如发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。


所以说危害那是相当严重,我们使用一张图来表示一下这个过程吧。

v2-6ebd6f9bb877dcf654d270b523374e8a_1440w.jpg至于能不能经得起诱惑,就看个人了。有时候我们点击了某一个链接但是没有执行任何操作,银行卡的钱却不见了,你知道这是为什么吗?我们可以模拟一下这个过程。


二、你的钱为什么会不见了


其实这个步骤和刚刚那个图是一样的。现在有张三和李四进行转账。


1、张三给李四100块,执行的操作是:


xxx/transfer.php?from=张三&money=100&to=李四

注意此时的张三没有把页面关闭掉。这里的前缀我没有写,因为文章审核通过不了。


2、黑客想把钱转给自己,执行的操作是:


xxx/transfer.php?from=张三&money=100&to=黑客

很明显会失败,这是因为张三在登录系统的时候会通过cookie,把自己的session传递给后台服务器。此时系统检查当前的session中的身份,发现不正确就拒绝了。


3、黑客继续想办法,使用不良网站诱导:


网站的连接很有颜色感,让张三欲罢不能,于是点击了诱导链接A。此时返回给黑客的信息就是:

<html>
    <body>
        <form method="get" action="xxx/java">  
            <input type="hidden" name="from" value="张三">   
            <input type="hidden" name="money" value="100">  
            <input type="hidden" name="to" value="黑客">   
            <input type="button" οnclick="submit()" value="来呀,快活呀">
        </form>
    </body>
</html>

如果此时张三刚刚给李四转完钱,并且页面还没关闭,就点击了这个链接,那么就会执行上面的操作。这是因为此时的黑客身份就是张三的信息,银行不知道因为是张三,于是接受了请求。


三、如何防范


1、验证码


这个道理很简单,也是目前使用最广泛的一种方式。验证码则强制用户必须与应用进行交互,才能完成最终请求。但该方式用户体验较差;


2、Referer Check防盗链


可以检测请求是否来自合法的源,如果请求不是来自合法源,则很可能发生了CSRF攻击,但服务器并不能在任何时候都能获取到Referer;


3、Token


使用动态的Token。使用真随机数或者经过密钥加密的字符串作为token值,使用方式可参考重放攻击防御中的token,该防御方式需要注意token的完全随机和有效期,一个经常无规则变动的token值往往是无法破解的。


具体的更加详细的就不说了。这个是面试中很常问的一个面试点。


相关文章
|
11天前
|
JSON 前端开发 安全
写了几年代码,你将跨域问题弄明白了吗?
互联网发展至今,前端开发者经常面临跨域问题,这是因为浏览器的同源策略限制了不同源的网页之间的数据交互。当尝试从`http://127.0.0.1:14949`访问`http://localhost:3000`的资源时,浏览器会阻止这种请求,因为它缺少“Access-Control-Allow-Origin”响应头,这是CORS(跨域资源共享)机制的要求。
|
9月前
|
SQL 安全 前端开发
Web安全性测试包括哪些要点?梳理下,总算搞明白了
Web安全性测试包括哪些要点?梳理下,总算搞明白了
265 0
Web安全性测试包括哪些要点?梳理下,总算搞明白了
|
监控 安全 程序员
对服务器中恶意程序分析的收获
对服务器中恶意程序分析的收获
54 0
|
监控 前端开发 JavaScript
大厂前端日常窥探「贰」:前端大佬们都在干啥?
大厂前端日常窥探「贰」:前端大佬们都在干啥?
101 0
|
前端开发 Java 测试技术
你肯定需要!软件测试面试题及答案这里面都有,关键不要钱
软件测人在进入岗位前,都要面对各种五花八门的面试问题。所以,不少人都会在面试前,提前做好相关的应试准备,如,面试话术,技能相关的面试真题背诵记录等等。 前者准备起容易,后者却比较费时费力,因为各个企业的面试题都会不一样,而想要提前做好应对准备,大量刷题就少不了,那哪里可以找大量的软件测试面试题及答案呢?
114 0
|
JSON 前端开发 安全
面试突击81:什么是跨域问题?如何解决?
面试突击81:什么是跨域问题?如何解决?
164 0
|
编译器 C++
萌新学习C++容易漏掉的知识点看看你中招了没有(二)
萌新学习C++容易漏掉的知识点看看你中招了没有(二)
萌新学习C++容易漏掉的知识点看看你中招了没有(二)
萌新学习C++容易漏掉的知识点,看看你中招了没有(一)
萌新学习C++容易漏掉的知识点,看看你中招了没有(一)
萌新学习C++容易漏掉的知识点,看看你中招了没有(一)