CSRF攻击原理及防护

news2024/10/7 4:28:40

CSRF攻击原理及防护

0x01 CSRF是什么

ssrf 服务端请求伪造

CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式,也被称为 one-click attack 或者 session riding。

0x02 CSRF攻击原理

CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。

0x03 CSRF攻击实例

角色: 正常浏览网页的用户:User 正规的但是具有漏洞的网站:WebA 利用CSRF进行攻击的网站:WebB

流程:

步骤一 用户登录、浏览并信任正规网站WebA,同时,WebA通过用户的验证并在用户的浏览器中产生Cookie。 在这里插入图片描述

步骤二 攻击者WebB通过在WebA中添加图片链接等方式诱导用户User访问网站WebB。 在这里插入图片描述

步骤三 在用户User被诱导访问WebB后,WebB会利用用户User的浏览器访问第三方网站WebA,并发出操作请求。 在这里插入图片描述

步骤四 用户User的浏览器根据WebB的要求,带着步骤一中产生的Cookie访问WebA。 在这里插入图片描述

步骤五 网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。 在这里插入图片描述

0x04 CSRF攻击防护

上文简单的叙述了CSRF攻击的原理,接下来将要介绍几种CSRF攻击的防护方法。

1. 只使用JSON API

使用JavaScript发起AJAX请求是限制跨域的,并不能通过简单的表单来发送JSON,所以,通过只接收JSON可以很大可能避免CSRF攻击。

2. 验证HTTP Referer字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如上文中用户User想要在网站WebA中进行转账操作,那么用户User

必须先登录WabA 然后再通过点击页面上的按钮出发转账事件

这时该转帐请求的 Referer 值就会是转账按钮所在的页面的URL,而如果黑客要对银行网站实施 CSRF攻击,他只能在他自己的网站构造请求,当用户User通过黑客的网站发送请求到WebA时,该请求的 Referer 是指向黑客自己的网站。 因此,要防御 CSRF 攻击,网站WebA只需要对于每一个转账请求验证其 Referer 值,如果是以网站WebA的网址开头的域名,则说明该请求是来自WebA自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

3. 在请求地址中添加token验证

服务端生成了一个token dsadadarqewajafjoenfeanf

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对

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

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

相关文章

flutter架构全面解析

Flutter 是一个跨平台的 UI 工具集,它的设计初衷,就是允许在各种操作系统上复用同样的代码,例如 iOS 和 Android,同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上,都能交付拥…

智慧公厕三大数字化远景,畅通数字化循环、夯实数字化基建、开创数字化创新

智慧公厕:实现数字化远景,提升公厕使用、建设与管理的创新之路 在现代社会中,公厕作为城市基础设施的重要组成部分,对城市形象和居民生活质量有着重要影响。然而,一些传统公厕管理的繁琐和配置设施的陈旧,…

centos7升级openssh版本

linux升级openssh版本,升级到8.6p1 小白教程,一看就会,一做就成。 1.下载rpm包 2.编写一键安装脚本(然后执行) #把所有的rpm包,我都放到了/ydy目录,下面安装时,也指定了这个目录 #编…

Golang-GJSON 快速而简单的方法来从 json 文档获取值

GJSON 是一个 Go 包,它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。 GJSON 也可用于Python和Rust 入门 安装中 要开始使用GJSON 请安装 Go 并运行 go get : $ go get -u github.com/ti…

HarmonyOS开发:走进静态共享包的依赖与使用

前言 在上一篇,我们进行了动态共享包的开发和使用,由于动态共享包有一定的局限性,比如,调用共享包资源还得要通过工具类进行调用,再比如仅用于应用内部代码、资源的共享,如果我想要开源,以远程依…

STM32纯中断方式发送接收数据(串行通信;keil arm5;)

除了main文件其他文件均无修改,正常运行--在keil arm5内

【腾讯云Cloud Studio实战训练营】戏说cloud studio

文章目录 前言产品概述项目体验登录空间模板模板项目体验 总结 前言 在奇幻世界中,存在着一片神秘的云海,被人们称为腾讯云云端开发环境 Cloud Studio。这片云海是一座巨大的浮岛,上面漂浮着一个集成式开发环境(Integrated Devel…

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动,这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合,如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求,1999年8月…

指针练习(2)

1. int main() {int a[5][5];int(*p)[4];p a;printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; } 解析:a是一个5行5列的二维数组,而p是一个访问4个元素的数组指针,将数组a的首元素地址也…

【开发问题系列】CSV转Excel

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

innovus: 加IO buffer

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 set fid [open $net_file w] foreach port_name $input_ports { set net [get_nets -q -of_object [get_ports $port_name]] set net_name [get_attribute $net full_name] …

python实现对excel表中的某列数据进行排序

如下需要对webCms中的B列数据进行升序排序,且不能影响到其他列、工作表中的数据和格式。 import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows# 读取 Excel 文件 file_path 1.xlsx sheet_name webCms# 读取 Excel 文件并…

Java之文件操作与IO

目录 一.认识文件 1.1文件是什么? 1.2文件的组织 1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述 三.文件内容操作--IO 3.1JavaIO的认识 3.2Reader和Writer ⭐Reader类 ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 …

scala基础

scala 基础 1. scala简介 scala是运行在 JVM 上的多范式编程语言,同时支持面向对象和面向函数编程早期scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘…

线程同步机制类封装及线程池实现

1.线程池 线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码。当有新的任务到来时,主线程将通过某种方式选择线程池中的某一个子线程来为之服务。相比与动态的创建子线程&#x…

CRC(Cyclic Redundancy Check)校验

CRC校验概念介绍 CRC,全称是Cyclic Redundancy Check,即循环冗余校验,它是一种计算校验码的方法。 生成多项式 可以用一个二进制比特位的序列来表示。例如生成多项式的二进制比特位序列是11001,X的指数就表示该比特位为1。二进…

[Spring] @Configuration注解原理

文章目录 1.Configuration注解介绍2.ConfigurationClassPostProcessor2.1 Parse12.2 Parse22.3 Parse32.4 Parse42.5 Parse5 3.ConfigurationClassBeanDefinitionReader3.1Bean方法解析成BeanDefinition 4.Configuration总结 1.Configuration注解介绍 在spring中是通过Configu…

墨西哥专线物流公司是什么?

墨西哥专线物流公司是为了满足墨西哥国内和国际货物运输需求而专门设立的一类物流公司。在全球贸易不断增长的背景下,墨西哥作为一个重要的贸易伙伴国,其货物运输需求逐渐增加,因此墨西哥专线物流公司的角色也变得越来越重要。 墨西哥专线物流…

26 | 深入浅出之静态测试方法

人工静态方法 代码走查结对编程同行评审(提交到git后,同事审核。最常用) 自动静态方法 自动静态方法,主要有以下三个特点: 相比于编译器,可以做到对代码更加严格、个性化的检查; 不真…

【AWS实验】 使用 Lake Formation 设置数据湖

文章目录 实验概览目标实验环境任务 1:探索实验环境任务 1.1:在 S3 存储桶中创建文件夹任务 1.2:加载 AWS Cloud9 IDE任务 1.3:将数据复制到 S3 存储桶 任务 2:设置 AWS Lake Formation任务 2.1:注册 Amazo…