Csrf跨站请求伪造漏洞简述

发布时间 2023-07-12 17:57:49作者: 小吕不忧伤

Csrf跨站请求伪造(客户端发起)

原理:

利用已登录的用户身份,以用户的名义发送恶意请求,完成非法操作。

当用户第一次发请GET请求时后台会给前端发送一个加密字符串,下次用户发请POST请求时就需要带这这个加密字符串发送

CSRF的使用:在setting.py中间件中的django.middleware.csrf.CsrfViewMiddleware来完成这个功能biand form表单发起请求在请求:在表单里面加上{% csrf_token %}就行 ajax的使用:对于某个请求设置,在请求头中加入headers: {'X-CSRFtoken': $.cookie('csrftoken')},

测试方法:

安全扫描;使用burpsuite进行抓包,将参数中的token删除,或者设置为空,重放请求,若正常访问则说明有漏洞;

同个浏览器打开两个页面,一个页面权限失效后,另一个页面是否可操作成功,如果仍然能操作成功即存在风险。

使用工具发送请求,在http请求头中不加入referer字段,检验返回消息的应答,应该重新定位到错误界面或者登录界面。

检测csrf漏洞一般是看每一个操作是否有验证码验证,是否有token或者referer,可以注册多个账户然后利用A用户生成的poc去检测B用户

#防御方案

1、当用户发送重要的请求时需要输入原始密码,二次验证,再次输入密码

2、设置随机Token: 请求地址中添加takon验证:筛选出需要防范 CSRF 的页面然后嵌入 Token

3、检验referer来源,请求时判断请求链接是否为当前管理员正在使用的页面(管

理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在

操作,所以攻击失败)

检验 Referer:验证HTTP头的Referer:仅响应Referer头带本域的请求。(同源策略)

4、设置验证码

使用localStorage或sessionStorage保存会话

5、限制请求方式只能为POST

例子(攻击基本思想)

用户如果浏览并信任了存在CSRF漏洞的网站A,浏览器产生了相应的cookie,用户在没有退出该网站的情况下,访问了危险网站B 。危险网站B要求访问网站A,发出一个请求。浏览器带着用户的cookie信息访问了网站A,因为网站A不知道是用户自身发出的请求还是网站B发出的请求,所以就会处理网站B的请求,这样就完成了模拟用户操作的目的。

工具

Burpsuit自带csrf跳转页面构造功能