vlambda博客
学习文章列表

CSRF防范介绍之一

一、前言

CSRF是Cross Site Request Forgery的缩写,即跨站请求伪造,CSRF攻击是借助受害者的Cookie骗取服务器的信任,以受害者名义伪造请求对服务器进行攻击,一直以来有个疑问,前后端分离使用LocalStorage存储用户令牌token是否还存在CSRF漏洞?今天我们先用Flask 搭建一个CSRF攻击简单例子来理解一下攻击过程,只有理解是如何攻击的才能做好防范。

二、正常网站A

搭建一个虚拟的银行网站,应用启动于8080端口,账号登录后就可以向其他账号进行转账,程序代码结构如下:

index.py

CSRF防范介绍之一

注:GET请求进入登录页面,POST请求获取登录页用户名密码验证通过后跳到转账页面,然后设置Cookie,用于转账时对用户进行验证。

CSRF防范介绍之一

注:GET请求进入转账页面,POST请求进行转账,转账前先验证Cookie是否有效,然后再进行转账。

login.html

CSRF防范介绍之一

transfer.html

CSRF防范介绍之一

登录成功后进入转账页面可以进行正常转账

CSRF防范介绍之一

CSRF防范介绍之一

如果没登录直接打开页面 http://127.0.0.1:8080/transfer是会被重定向到登录页,必须先登录才能进行转账页面。

三、恶意网站B

另外搭建一个攻击网站,这里我们将应用启动在8081端口,代码结构如下:

CSRF防范介绍之一

index.py

CSRF防范介绍之一

index.html

CSRF防范介绍之一

A网站登录没有退出的情况下,在B网站点击链接

这样你用qingcai1在A网站登录然后点击了B网站的链接,qingcai1的钱就被恶意地转到qing

cai2账号去了。