CSRF(跨站请求伪造)概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。

CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

如何确认一个web系统存在CSRF漏洞:

1.对目标网站增删改的地方进行标记,并观察其逻辑,判断请求是否可以被伪造

  •   ****比如修改管理员账号时,并不需要验证旧密码,导致请求容易被伪造;
  •   ****比如对于敏感信息的修改并没有使用安全的token验证,导致请求容易被伪造;

2.确认凭证的有效期(这个问题会提高CSRF被利用的概率)

  •   ****虽然退出或者关闭了 浏览器,但cookie仍然有效 ,或者session并没有及时过期 ,导致CSRF攻击变的简单;

CSRF(get)

打开pikachu的CSRF(get)页面,输入账号密码,修改个人信息,然后到burp中抓包查看

我们可以看到后台并没有一些防CSRF的措施,同时有时通过get请求来提交的

接来下我们只需要获取到网站修改个人信息的get请求链接,把信息修改成我们想要修改的信息,发送给用户就可以了,一旦用户点击攻击就完成了

http://127.0.0.1:88/pikachu/vul/csrf/csrfget/csrf_get_edit.php? sex=girl&phonenum=12345678922&add=wuhan&email=lucy%40pikachu.com&submit=submit

CSRF(post)

打开pikachu的CSRF(post)页面,登入账号密码,修改个人信息,然后打开burp抓包查看

可以看到请求是以post方式提交的,所有的参数都在请求体里传输的,无法利用url来伪造请求

这个是之前post型的xss方式是一样的,我们构造一个自己的站点,在这个站点上做一个表单,然后让用户去点我们恶意站点的表单url

利用这表单的url去向网站的后台提交请求

相应的恶意站点后台文件,把里面相应的信息修改成我们想要的,

将我们伪造表单的url /http://127.0.0.1:88/pikachu/vul/csrf/csrfpost/csrf_post.php 发给用户,诱使用户点击,一旦用户点击我们的攻击就完成了

CSRF(token)的防范措施

CSRF的主要问题是敏感操作容易被伪造,可以加通过加入Token让请求不容易被伪造

  • 即每次都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证!

我们登入pikachu平台的CSRF(token)页面,修改个人信息,然后burp中抓包查看个人信息修改的get请求

可以看到和之前相比这里多一个token值,来防CSRF的

接下来我们看看前端如何拿到token,以及如何提交给后端验证的

每次用户后台都会生成一个token,用户做一些敏感操作后台都回去验证这个token,这样就有效的防范了CSRF攻击

CSRF的防范措施

增加Token验证(常用做法):

  1. 对关键操作增加token参数,token值必须随机,每次都不一样;

关于安全的会话管理(避免会话被利用) :

  1. 不要在客户端端保存敏感信息(比如身份认证信息) ;
  2. 测试直接关闭,退出时,关闭浏览器的会话过期机制;
  3. 设置会话过期机制,比如15分钟内无操作,则自动登录超时;

访问控制安全管理:

  1. 敏感信息的修改时需要对身份进行二次认证,比如修改账号时,需要判断旧密码;
  2. 敏感信息的修改使用post,而不是get ;
  3. 通过http头部中的referer来限制原页面;

增加验证码:
一般用在登录(防暴力破解) , 也可以用在其他重要信息操作的表单中(需要考虑可用性);

Web安全之CSRF(跨站请求伪造)的更多相关文章

  1. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  2. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  3. Django框架(十二)-- 中间件、CSRF跨站请求伪造

    中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...

  4. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结(转载)

    转载自 https://blog.csdn.net/baidu_24024601/article/details/51957270 之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让 ...

  5. django 中间键 csrf 跨站请求伪造

    django中间件和auth模块   Django中间件 由django的生命周期图我们可以看出,django的中间件就类似于django的保安,请求一个相应时要先通过中间件才能到达django后端( ...

  6. SpringSecurity原理解析以及CSRF跨站请求伪造攻击

    SpringSecurity SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核心功能包括: 认证 (用户登录) 授权 (此用户能够做哪些事情) 攻击防护 (防止伪造 ...

  7. python CSRF跨站请求伪造

    python CSRF跨站请求伪造 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  8. Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

    首先这是一个测试的代码 请先在setting页面进行下面操作 注释完成后,开始模拟钓鱼网站的跨站请求伪造操作: 前端代码: <!DOCTYPE html> <html lang=&q ...

  9. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

  10. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

随机推荐

  1. 「 洛谷 」P4539 [SCOI2006]zh_tree

    小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...

  2. react第十六单元(redux的认识,redux相关api的掌握)

    第十六单元(redux的认识,redux相关api的掌握) #课程目标 掌握组件化框架实现组件之间传参的几种方式,并了解两个没有任何关系组件之间通信的通点 了解为了解决上述通点诞生的flux架构 了解 ...

  3. xss靶场练习(7.22)

    靶场地址:http://xss.fbisb.com/ 参考的文章:https://www.cnblogs.com/cute-puli/p/10834954.html  感谢大佬的分享 做这个题的思路就 ...

  4. Liunx运维(五)-信息显示与搜索文件命令

    文档目录: 一.uname:显示系统信息 二.hostname:显示或设置系统的主机名 三.dmesg:系统启动异常诊断 四.stat:显示文件或文件系统状态 五.du:统计磁盘空间使用情况 六.da ...

  5. 蒲公英 · JELLY技术周刊 Vol.35: Flash 四宗罪?

    蒲公英 · JELLY技术周刊 Vol.35 Flash 曾是 Web 迈向新世代的福音书,它为这个世界带来了缤纷色彩,但也如伊甸园的苹果,闪耀着智慧的光芒,却四灾随行.诞生 1995 年至今 25 ...

  6. 纯Python绘制艺术感满满的山脊地图,创意满分

    1 简介 下面的这幅图是英国摇滚乐队 Joy Division 在1979年发行的其第一张录音室专辑 Unknown Pleasures 的封面,由艺术家 Peter Saville 基于射电脉冲星信 ...

  7. js 根据条件删除数组中某个对象&js filter (find)过滤数组对象的使用

    删除 ----  item不设置 arr.splice(1,1)   //['a','c','d']         删除起始下标为1,长度为1的一个值,len设置的1,如果为0,则数组不变 arr. ...

  8. web基础知识,

    # web基础 网上冲浪 surfing the Internet weibo.com 域名,主机名,微博服务器的地址名 当用户在地址栏输入一个URL(uniform resource,locator ...

  9. windows下plsql连接linux下的oracle数据库

    windows下plsql连接linux下的oracle数据库 经过多方查找,终于找到解决办法,特此记录下来,共享之. PL/SQL Develorper:目前未发现可以在Linux系统中安装的版本. ...

  10. Java 中的PO VO DTO BO

    PO 持久对象,数据: BO 业务对象,封装对象.复杂对象 ,里面可能包含多个类:DTO 传输对象,前端调用时传输 :VO 表现对象,前端界面展示. 当你业务足够简单时,一个POJO 也完全当做PO ...