主题:剖析在Django中使用CSRF攻击实现银行转账原理
分享人:知了课堂
什么是CSRF攻击:
CSRF是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 CSRF 漏洞,从而被黑客攻击而使 Gmail 的用户造成巨大的损失。因此CSRF攻击绝对不容小觑。那么CSRF攻击的原理到底是什么呢?以下来看看。
CSRF攻击原理:
网站是通过cookie来实现登录功能的。而cookie只要存在浏览器中,那么浏览器在访问这个cookie的服务器的时候,就会自动的携带cookie信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,病毒攻击者在这个网站源代码中插入一些js代码,然后给其他服务器(比如ICBC网站)发送请求(比如转账请求)。那么因为js在发送请求的时候,浏览器会自动的把cookie发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是否是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。
JavaScript同源策略:
很多朋友看到上面的原理可能会说,不要忽悠我了,浏览器中是有同源策略的,js压根没法向除本服务器以外的其他服务器发送请求。(同源策略的意思是,js只能向自己的服务器发送请求,不能向其他服务器发送请求。比如百度的网站中的js代码,不能向谷歌发送网络请求)。但是,我想说,too young too simple,您可能不知道iframe这个标签的神奇的用法!
用CSRF攻击实现银行转账:
首先使用Django创建一个具有csrf漏洞的ICBC网站。这个网站可以进行普通的注册,登录,转账等功能。
然后创建一个具有CSRF攻击的病毒网站,在这个网站中,我会嵌入一些脚本代码,只要你访问了我这个网站,那么我就会跨过“同源策略”的限制向ICBC这个网站的服务器发送一个转账的请求,让你在不知不觉中金额就被转到其他账户上去了。