Cors_test(批量测试网站是否存在CORS劫持)

本文介绍了一款Python脚本,用于批量测试Web站点是否存在CORS劫持漏洞,仅当Access-Control-Allow-Origin设置为特定域时生效。脚本支持多线程,并提供了三种测试模式,测试结果将保存在本地文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该脚本用于批量测试是否存在CORS劫持,只有当Access-Control-Allow-Origin为baidu.com时才存在,否则需要在Access-Control-Allow-Origin域下才可劫持。

环境:Python3

使用:python3 cors_test.py url.txt

漏洞存在的会放入当前目录下的cors_success.txt。

缺点:无爬虫,无法测试api,只能测试网站是否存在CORS劫持,但无法准确找到信息泄露点。

 

#5.21更新

1.添加多线程

2.由文章添加了新的两种测试模式。

参考文章:https://xz.aliyun.com/t/5169
 
 
由于cnblogs排版问题,就不在cnblog上放代码了,上传到网盘了,有需要的师傅可以自行下载。
 
链接: https://pan.baidu.com/s/1Ex0XOfHXx1L4stPoOBpouA 提取码: 4zvn 

转载于:https://www.cnblogs.com/P1g3/p/10773433.html

<think>我们参考上述引用内容来分析jsessionid作为token的可行性及方法。引用[1]和[2]介绍了token的常见组成和校验机制。引用[1]提到JWTtoken由header、payload和signature三部分组成,利用签名机制保证安全性。引用[2]指出最简单的Token组成包括uid、time和sign(签名,用于防止恶意请求)。引用[3]提到cookie的组成以及session和token的概念。问题核心:使用jsessionid作为token测试接口背景知识:-jsessionid是JavaWeb应用服务器(如Tomcat)为每个会话(session)分配的唯一标识符,通常以cookie的形式(如`JSESSIONID=xxxxx`)或URL重写的方式存在。-在基于session的认证机制中,服务器通过jsessionid来识别客户端,并在服务器端存储了与该session相关的用户信息(如用户登录状态等)。可行性分析:1.功能上:只要接口接受在请求中携带jsessionid(通常放在Cookie头中),并且服务器端仍然维护着该session,那么使用jsessionid作为“令牌”来测试接口是可行的。2.安全性:与JWT等token机制不同,jsessionid本身不携带用户信息,也不包含签名,它只是一个会话标识符。因此,它依赖于服务器端的会话存储。如果传输通道不安全(如使用HTTP而非HTTPS),jsessionid可能会被截获,导致会话劫持。此外,如果session的存储和管理不当,也可能存在安全风险。3.测试接口:在测试中,我们通常关注的是接口的功能性,而非生产环境的安全性(当然,如果安全是需求的一部分则需考虑)。因此,在测试环境中使用jsessionid进行接口测试是常见的做法。使用方法:1.首先,需要获取一个有效的jsessionid。通常,通过登录接口可以获取,因为登录成功后服务器会返回一个Set-Cookie响应头,其中包含JSESSIONID。2.然后,在后续的接口请求中,在请求头中加入Cookie:JSESSIONID=xxxxx。3.注意:jsessionid有有效期(服务器端session的超时时间),如果超过时间没有活动,session会失效,需要重新登录获取。示例步骤(使用JavaScript的fetchAPI):步骤1:登录获取jsessionid```javascriptconstloginResponse=awaitfetch('http://example.com/login',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded',},body:'username=test&password=test'});//从响应头中提取jsessionidconstjsessionid=loginResponse.headers.get('set-cookie').match(/JSESSIONID=([^;]+)/)[1];```步骤2:使用获取的jsessionid调用其他接口```javascriptconstapiResponse=awaitfetch('http://example.com/api/data',{method:'GET',headers:{//将jsessionid放入Cookie头'Cookie':`JSESSIONID=${jsessionid}`}});```注意事项:-在测试中,需要确保每次测试开始时获取一个新的jsessionid(或者复用同一个session,根据测试需求而定)。-如果服务器配置了跨域限制,需要在请求中处理CORS问题。-如果测试多个用户,需要为每个用户维护不同的jsessionid。总结:在测试接口时,使用jsessionid作为会话凭证是可行的,但需注意其安全性和会话管理机制。在测试环境中,这种方法简单易行,适合基于session认证的Web应用接口测试。生成相关问题:1.在测试中如何处理jsessionid的过期问题?2.除了jsessionid,还有哪些常见的会话管理方式可用于接口测试?3.如何保障在使用jsessionid测试接口时的安全性?4.使用jsessionid与使用JWTtoken在测试中有何不同?</think> ### 使用 `JSESSIONID` 作为 Token 测试接口的可行性分析 #### ✅ 可行性评估 1. **技术原理可行** 根据引用[1][^1]的签名机制原理,`JSESSIONID` 本质是服务器生成的会话标识符: - 类似 Token 的 `uid`(用户唯一标识)作用(引用[2][^2]) - 符合 Cookie 的安全传输规范(引用[3][^3]),可通过 HTTPS 保证安全传输 - 在服务端会话存续期间有效 2. **测试场景适用性** 适合测试需要会话状态的接口(如引用[4][^4]提到的交易类接口),因为: - 服务器通过 `JSESSIONID` 关联用户会话数据 - 替代用户登录状态进行身份验证 3. **安全限制** - **仅限测试环境使用**:生产环境需使用 JWT 等加密 Token(引用[1][^1]) - **有效期短**:受服务端 session 超时时间限制(通常 30 分钟) --- ### 🔧 测试方法(示例代码) #### 步骤 1:获取 JSESSIONID ```javascript // 用户登录获取 Cookie const login = async () => { const res = await fetch("/login", { method: "POST", body: JSON.stringify({user: "test", pwd: "123"}), headers: {"Content-Type": "application/json"} }); // 提取 JSESSIONID (Tomcat 默认格式) const cookies = res.headers.get("set-cookie"); const jsessionid = cookies.match(/JSESSIONID=([^;]+)/)[1]; return jsessionid; }; ``` #### 步骤 2:携带 JSESSIONID 测试接口 ```javascript // 测试受保护接口 const testAPI = async (jsessionid) => { const res = await fetch("/api/transaction", { method: "GET", headers: { "Cookie": `JSESSIONID=${jsessionid}` // 关键:在 Cookie 头中传递 } }); return res.json(); }; // 执行测试 (async () => { const token = await login(); const data = await testAPI(token); console.log("接口返回:", data); })(); ``` --- #### ⚠️ 注意事项 1. **安全传输** 必须通过 HTTPS 传输(引用[3][^3]),避免会话劫持 2. **状态依赖** 需要先完成登录流程获取有效的 `JSESSIONID` 3. **服务端配置** 确保服务启用了 session 管理(如 Tomcat 的 `<session-config>`) 4. **跨域限制** 浏览器需配置 `withCredentials: true` 和 CORS 白名单 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值