csrf漏洞防御方案_CSRF原理实战及防御手段

注:本文仅供学习参考

csrf定义:

CSRF跨站点请求伪造(Cross—Site Request Forgery)攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

个人理解(我是没权限修改你信息,但如果这个站点存在csrf的话,你想完成转账修改信息等操作,并且你知道这个站怎么请求这些信息的,你可以构造一个恶意的数据包,骗对方点击,对方点击后会以自己的名义给服务器发送请求是合法的,但是攻击者已经完成了他想要的操作)

csrf利用条件

目标必须已经登录这个网站存在认证信息

并且点击了攻击者的链接

所以条件是比较苛刻的通常配合xss其他漏洞使用

因此,要成功实施一次CSRF攻击,需要天时,地利,人和

实战

假设受害者为lili,登录到这个网站上

如果这个站点存在csrf,我们可以伪装恶意数据包,抓个包生成恶意数据包

可以看到信息是一一对上的,这时修改我们想修改的信息

已经修改完了,这时候发送链接给lili,这里模仿lili点击了这个链接

发现信息已经修改成为我们预想中的信息了。这就是一个很普通的csrf

我们也可以让受害者打开就提交,不用受害者点击

csrf防御修复方案

检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等。

常见三种方法

验证 HTTP Referer 字段;

在请求地址中添加 token 并验证;

在 HTTP 头中自定义属性并验证

验证 HTTP Referer 字段

验证referer字段的话就是说你从浏览器哪里来的,如果你不是从我这里去访问,而是从其他浏览器去访问的话就会禁止,认为存在危险行为。但这种Referer值根据浏览器不同而有不同的认证,依赖于第三方浏览器。相对来说不安全

在请求地址中添加 token 并验证

简单来说,就是构造一个值是攻击者所无法仿造的,服务器验证这个值后才允许一系列的操作,这个值就是token。一定是随机的,有些token根据时间制定的话不安全,但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。

在 HTTP 头中自定义属性并验证

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。

csrf暂时总结到这里!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何学习(记住)linux命令(常用选项)

作者:林果皞 链接:https://www.zhihu.com/question/21690166/answer/66721478 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Unix & Linux 命令行特别之处在于,一些选项的设…

python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数

这是Python3.8新特性的第二篇,第一篇介绍了赋值表达式,这篇文章花几分钟了解什么是仅位置参数(Positional-Only Arguments)插播一条:我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程&#xff0…

增效工具_【危中寻机】降本增效生存之道 运用IE基础工具提升制造效率

效率提升的利器工业工程IE作为一门学科诞生于美国,却首先在日本得到了最大程度的践行与推广,成为了丰田生产方式TPS及精益制造LP的核心现场IE中的4大核心(工程分析、动作分析、时间分析、布局分析)仍是所有IE的入门工具,被笔者称为“基础IE”…

linux之fstab文件详解

/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。 当系统启动的时候,系统会自动地从这个文件读取信息,并且…

python写空气质量提醒_Python数据可视化:2018年空气质量分析

就在本周,我碰巧看到一个学生抱怨天津的空气,我不禁思考的日子他是如此善良的和完善的。没有真相,就无图下面的图片证据。左边的图片是去年2月份。这样的空气真是少见!右边的是Tucao和我第一次买一个口罩!!!面具是好的,因为在那个时候,我用来运行的两个校园课程设计。基本上,我…

Linux日志安全分析技巧

0x00 前言 我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。 GitHub 地址:https://github.com/Bypass007/Emergency-Response-Notes 本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址…

as将安卓应用打包_Android Studio打包生成apk的方法(超级简单哦)

释放双眼,带上耳机,听听看~!打包文件是需要生成APK文件,其他人可以通过APK安装和使用,一般来说,包是指APK生成的发布版本,下文技术狗小编还介绍了Android Studio 超级简单的打包生成apk的方法&a…

Linux系统安全日志详解

日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和…

帆软单点登录_电子表格FineReport教程:[20]CAS单点登录

若报表应用设置了权限,则需要将如下代码:package com.fr;import java.io.IOException;import java.io.PrintStream;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletExce…

【转】老男孩:Linux企业运维人员最常用150个命令汇总

近来老男孩发现新手学习Linux记不住命令,不会分类、不会筛选重点,胡子眉毛一把抓当然记不住了。 特别整理Linux运维最常用150个命令和大家分享,大家学习命令不用在盲目了,根据分类,然后逐步学习! 命令 功…

mysql 不在另一张表_mysql查询在一张表不在另外一张表的记录

mysql查询在一张表不在另外一张表的记录问题:查询一个表(tb1)的字段记录不在另一个表(tb2)中条件:tb1的字段key的值不在tbl2表中---------&#x…

Linux中常用的命令都是哪些单词的缩写

作者:蓬岸 Dr.Quest 链接:https://www.zhihu.com/question/49073893/answer/114986798 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 417个命令缩写:https://www.abbreviations.co…

ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作

mysql、ubuntu系统防火墙常规操作编辑:006 时间:2020-02-11mysql:数据库操作连接数据库:mysql -u username -p创建数据库:create database databasename;删除数据库:drop database databasename;指定数…

CentOS7关闭防火墙和SELinux

关闭防火墙 临时关闭防火墙 systemctl stop firewalld临时打开防火墙 systemctl start firewalld防火墙开机关闭 systemctl disable firewalld防火墙开机启动 systemctl enable firewalld查看防火墙状态 systemctl status firewalld关闭selinux 临时关闭SELinux setenf…

如何重新安装 Linux 的操作管理套件 (OMS) 代理

重要提示:本文章是 Microsoft 软件自动翻译的结果,而非专业译者翻译的结果。 Microsoft 提供专业人员翻译的文章、由自动翻译生成的文章以及来自 Microsoft 社区的文章翻译,因此你能够以自己的语言阅读所有知识库文章。 需要注意的是&#xf…

mysql根据idb还原数据_mysql通过idb文件,恢复数据库

原因: 由于一次未知原因,服务器停机后,导致数据库不能启动,由于刚接手项目,对此数据库的配置不是那么清晰,分析了很多,最后还是没发正常启动。由于发现数据idb文件还在,最后就采取了…

如何轻松记忆Linux文件系统层次结构

Linux对于新手来说非常难学。打好基础对于后面深层次的学习非常重要。 对文件系统层次结构要基本的概念。怎么才能理解并且记忆层级结构呢? 方法/步骤 为了帮助记忆,我做了一个比较清晰的图表来协助层次的记忆。 很多目录文件夹的名字长得非常抽象&…

node输出mysql的数据_node.js+async+mysql 查询数据输出问题,如何分别统计、提取每个sql语句的结果!!...

展开全部首先这是一个很简单的问e5a48de588b63231313335323631343130323136353331333335343366题,cnodejs这个论坛node大神算是最多的了,为什么会卡那么久你想过么。看看你提问的诚意吧——代码不格式化,不写注释,各种魔术数字令人…

fmc是fpga直接引出来的吗_家长速看!你还在用“不要和陌生人说话”糊弄孩子的安全教育吗?...

在许多幼儿安全教育案例中,我们都会看到这样一个试验:记者假扮人贩子,利用棒棒糖、零食去诱惑幼儿园的孩子。在其中一次试验中,21个孩子有20个中招,直接跟着陌生人走了。这个试验最终引出来的结论就是要教育孩子不要和…

CentOS 7文件系统与日志分析详解

Linux 文件系统 在处理 Linux 系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键。熟悉 Linux 系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点、“对…