Csrf跨站请求伪造漏洞简述
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跳转页面构造功能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码