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);
    }
})();
相关推荐
Name:PLC13 分钟前
vue3中使用watch
前端·javascript·vue.js
前端 贾公子1 小时前
小程序使用web-view 修改顶部标题 && 安全认证文件部署在nginx
开发语言·前端·javascript
李是啥也不会1 小时前
Vue3 中 Axios 深度整合指南:从基础到高级实践引言
javascript·typescript
记得早睡~1 小时前
leetcode3-无重复字符的最长子串
javascript·数据结构·算法·leetcode
未来之窗软件服务2 小时前
封装拍照模块,拓展功能边界—仙盟创梦IDE
前端·javascript·html·摄像头·仙盟创梦ide
cui_hao_nan3 小时前
lua脚本实战—— Redis并发原子性陷阱
java·lua
争不过朝夕,又念着往昔3 小时前
Lua基础语法
开发语言·junit·lua
源力祁老师3 小时前
Odoo: Owl Props 深度解析技术指南
前端·javascript·网络
BillKu3 小时前
Vue3 Element Plus el-table-column Sortable 排序失效
javascript·vue.js·elementui
捡星星同学3 小时前
el-table高度自适应、数据查询后高度展示错误问题
javascript·vue.js·elementui