如何使用javascript从给定的csrftoken构造csrfmiddlewaretoken?
我正在工作如何登录到邮递员的Django网站。 使用Charles我可以看到一个csrfmiddlewaretoken令牌以某种方式创建。如何使用javascript从给定的csrftoken构造csrfmiddlewaretoken?
鉴于
csrftoken=JDmmXqnLK35WCLha1PVOhFWITaKZs9eeAWBfuqXUxZEt3yDHmNoOyzMyJUQF5aQd
的csrfmiddlewaretoken发送被
v3I6Io9H8OoZcp4ATyszhAepdQAEp617mmXZfoJQVKXwDcq7ewVzyu4f3AGk27D6
能 v3I6Io9H8OoZcp4ATyszhAepdQAEp617mmXZfoJQVKXwDcq7ewVzyu4f3AGk27D6 从
JDmmXqnLK35WCLha1PVOhFWITaKZs9eeAWBfuqXUxZEt3yDHmNoOyzMyJUQF5aQd 使用JavaScript构建的?
这个问题的关键是理解其中csrfmiddlewaretoken是从哪里来的。 我以为它是从csrftoken以某种方式构建的。 我意识到它必须是服务器提供的隐藏变量。
所以问题就变成了如何从初始get调用中提取csrfmiddlewaretoken值来登录。注意邮差现在使用加入jQuery的cheerio。
在get call中使用postman jetpack这是我用来提取隐藏输入值的测试。
tests["responseCode.code === 200"] = responseCode.code === 200 ;
var csrftoken = postman.getResponseCookie("csrftoken").value ;
tests['csrftoken: ' + csrftoken ] = csrftoken.length > 0 ;
var html ;
html = cheerio(responseBody) ;
inputs = html.find('input') ;
csrfmiddlewaretoken = '' ;
postman.setEnvironmentVariable("csrfmiddlewaretoken", csrfmiddlewaretoken) ;
for(var index = 0 ; index < inputs.length ; index++) {
var input = inputs[index] ;
if (input.attribs.name === 'csrfmiddlewaretoken') {
csrfmiddlewaretoken = input.attribs.value ;
postman.setEnvironmentVariable("csrfmiddlewaretoken", csrfmiddlewaretoken) ;
}
}
tests['csrfmiddlewaretoken: ' + csrfmiddlewaretoken ] = csrfmiddlewaretoken.length > 0 ;
然后在通话后实际登录。
我不得不根据网站安全策略添加Referer头。
Content-Type:application/x-www-form-urlencoded
Referer:{{referer}}
表单值
csrfmiddlewaretoken:{{csrfmiddlewaretoken}}
username:{{username}}
password:{{password}}
next:{{next}}
,然后在发送后电话邮递员脚本成功登录
pm.test("Status code is 200", function() {
pm.response.to.have.status(200);
});
:-)
为了获得CSRF令牌只是通过邮递员登录,你可以做两件事情:
要么使用开发工具和通过检查你的形式,寻找隐藏拿到CSRF中间件令牌csrfmiddleware输入字段。 (这将在服务器端渲染的情况下起作用)
-
从cookie中获取csrf标记。下面是Django文档提到here
function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken');
一旦你获得了CSRF令牌jQuery的工具,只需添加一个头在邮差您的要求与关键X-CSRFToken
和值作为CSRF令牌。
希望这是有益:)
你要什么,以实现与在Javascript中构建csrf标记? – Swapnil
唯一不同于我可以看到的是什么有效并且失败的是提供csrfmiddlewaretoken。在http调用中使用浏览器和charles csrfmiddlewaretoken。我正在寻找创建csrfmiddlewaretoken来发送postman post请求,并希望登录到系统。 –
在提问的时候,我有了这个网站可能会产生它的想法......这是! –