postman注入csrf




示例脚本

参数配置位置

必要参数

django项目仅需要设置domain即可,比如www.baidu.com,baidu.com尽量域名精确避免修改到其他域的参数

必须把这个domain添加到 cookies->Manage cookies ->Domains Allowlist 中,否则cookie的注入失败

代码

javascript 复制代码
// 必须把这个domain添加到 cookies->Manage cookies ->Domains Allowlist 中,否则cookie的注入失败
var domain = pm.environment.get("domain") || pm.globals.get("domain");
// console.log("domain:",domain)

// 获取全局变量的csrf, csrf为任意64位字符串若不设置则使用默认
var csrf = pm.globals.get("csrf") || "0123456789012345678901234567890123456789012345678901234567891234";

// 若没有设置环境变量则取全局变量
var csrf_cookie_name = pm.environment.get("csrf_cookie_name") || pm.globals.get("csrf_cookie_name")
// 默认为django设置的名字为csrftoken
var default_csrf_cookie_name = "csrftoken"

if (csrf_cookie_name) {
    // 如果有csrf_cookie_name
    csrf_cookie_name = csrf_cookie_name;
} else {
    // 如果没有
    csrf_cookie_name = default_csrf_cookie_name;
}
// console.log("csrf_cookie_name:", csrf_cookie_name);

// 删除原来的csrf头
pm.request.removeHeader("X-CSRFToken");
// 添加header
pm.request.addHeader(`X-CSRFToken:${csrf}`);


//创建一个cookie容器
const cookieJar =pm.cookies.jar();

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function deleteCookie(domain, cookieName) {
    return new Promise((resolve, reject) => {
        //删除cookie中的cookieName,参数: url,cookieName,回调函数function(异常)
        cookieJar.unset(domain, cookieName, function (error) {
            // console.log(`删除 ${cookieName} cookies`);
            // console.log("error", error);
            if (error) {
                reject(error);
            } else {
                resolve();
            }
        });
    });
}

async function checkAndSetCookie(domain, cookieName, csrf) {
    // 睡眠10毫秒
    await sleep(10);

    // 查看 Cookie 是否存在
    cookieJar.get(domain, cookieName, function (error, cookie) {
        console.log("查看");
        console.log("cookie", cookie);
        // console.log("error", error);

        if (!cookie) {
            // 如果没有找到 Cookie,设置它
            console.log("未找到 Cookie,开始设置");
            cookieJar.set(domain, cookieName, csrf, function (error, cookie) {
                console.log(`设置 ${cookieName} Cookie 为 ${cookie}`);
                // console.log("cookie", cookie);
                // console.log("error", error);

                // 设置完成后再次调用检查函数
                checkAndSetCookie(domain, cookieName, csrf);
            });
        } else {
            // 如果找到 Cookie,输出成功信息
            console.log("Cookie 已存在,结束");
        }
    });
}

(async function() {
    try {
        // 首先删除 Cookie
        await deleteCookie(domain, csrf_cookie_name);
        // 然后开始检查和设置 Cookie
        checkAndSetCookie(domain, csrf_cookie_name, csrf);
    } catch (error) {
        console.error("删除 Cookie 失败:", error);
    }
})();
相关推荐
两个西柚呀3 小时前
未在props中声明的属性
前端·javascript·vue.js
SteveJrong5 小时前
面试题 - JavaScript
前端·javascript·面试·ecmascript·基础·找工作·红宝书
阿金要当大魔王~~6 小时前
uniapp 页面标签 传值 ————— uniapp 定义 接口
前端·javascript·uni-app·1024程序员节
「QT(C++)开发工程师」6 小时前
嵌入式Lua脚本编程核心概念
开发语言·lua
一个处女座的程序猿O(∩_∩)O7 小时前
Vue-Loader 深度解析:原理、使用与最佳实践
前端·javascript·vue.js
还是大剑师兰特7 小时前
TypeScript 面试题及详细答案 100题 (91-100)-- 工程实践与框架集成
前端·javascript·typescript·1024程序员节
可触的未来,发芽的智生8 小时前
触摸未来2025-10-25:蓝图绘制
javascript·python·神经网络·程序人生·自然语言处理
用户47949283569158 小时前
typeof null === 'object':JavaScript 最古老的 bug 为何 30 年无法修复?
前端·javascript·面试
非凡ghost8 小时前
By Click Downloader(下载各种在线视频) 多语便携版
前端·javascript·后端
非凡ghost8 小时前
VisualBoyAdvance-M(GBA模拟器) 中文绿色版
前端·javascript·后端