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);
    }
})();
相关推荐
之歆5 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
Maimai108085 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong5 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
卡卡军8 小时前
agmd 1.0 重磅升级——Rust 重写,性能起飞
javascript·rust
Larcher8 小时前
🔥 告别抓瞎:用 Claude Code (cc) 优雅接手与维护已有项目
javascript·机器学习·前端框架
JYeontu8 小时前
轮播图不够惊艳?试下这个立体卡片轮播图
前端·javascript·css
亲亲小宝宝鸭8 小时前
如何监听DOM尺寸的变化?element-resize-detector 和 resizeObserver
前端·javascript
卷帘依旧11 小时前
Generator 全面解析 + async/await 深度对比
前端·javascript
weixin_4713830311 小时前
统一缩放单位基础(px、em、rem)
开发语言·javascript·ecmascript
yqcoder11 小时前
数据劫持的双雄:深入解析 Object.defineProperty 与 Proxy
开发语言·前端·javascript