CSRF攻击:Cross site request forgery,跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
举个例子: 你访问了信任网站 A,然后 A 会用保存你的个人信息并返回给你的浏览器一个cookie,然后呢,在 cookie 的有效时间之内,你去访问了恶意网站 B,它给你返回一些恶意请求代码,要求你去访问网站 A,而你的浏览器在收到这个恶意请求之后,在你不知情的情况下,会带上保存在本地浏览器的 cookie 信息去访问网站 A,然后网站 A 误以为是用户本身的操作,导致来自恶意网站 C 的攻击代码会被执:发邮件,发消息,修改你的密码,购物,转账,偷窥你的个人信息,导致私人信息泄漏和账户财产安全受到威胁。
下面演示用户登录中国银行后,在未关闭浏览器会话的情况下去登录危险网站(某游戏网站,电影网站等)自动转账给黑客的过程:
一开始已经注册过账户wangyi,里面有9774元,再去注册个账户hack02,再登录wangyi账户,给hack02转账1000元,查看数据库可知转账功能没问题。其实黑客也在中国银行有个账户hacker,当你登录wangyi账户做完事后再去访问黑客的游戏网站/hacker,当点击开始游戏时就会自动将wangyi账户的钱转100元给账户hacker,这个过程用js实现更为方便,隐蔽。
这就是基本的csrf攻击。原理是利用保存在客户端cookie中的session去访问中行取得信任后实现转账的。
整个项目包括app主模块,配置文件,db中间件,表单验证,表单装饰器,命令行管理,数据库模型等多个模块构成。
其实我应该将黑客页面放在不同的ip下,哪怕端口换个也行。
防御措施:可以加csrf_token ,写了之后没保存不小心被关了。