【发布时间】:2017-05-17 03:35:08
【问题描述】:
我在 expressjs 中使用 csurf 模块。它适用于所有发布请求,因为我使用以下方式。
app.use(csrf());
res.locals.csrfToken = req.csrfToken();
通过这种方式,它会自动以我拥有以下内容的所有形式提供。
<input type="hidden" name="_csrf" value="<%=csrfToken%>">
但是如何在 AJAX 请求上设置 csrftoken,我没有使用 jquery,下面是发送 AJAX 请求的 JS 函数。我确实有 html 上的 csrf 令牌作为我可以通过 getElementByID 访问的隐藏值。
注意:如果我禁用 csrf,我可以发送请求。
function voteQuestion () {
var qid = document.getElementById("qid").value;
var csrf = document.getElementById("csrf").value;
var http = new XMLHttpRequest();
var url = "/q/ajaxcall";
var params = "qid="+ qid;
http.open("POST", url);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.onreadystatechange = function() {
if(http.readyState == XMLHttpRequest.DONE && http.status == 200) {
var json = (http.responseText);
var obj = JSON.parse(json);
document.getElementById("vote-sp").innerHTML = (obj.upvotes);
}
};
http.send(params);
}
【问题讨论】:
-
您可以使用
FormData()对象通过CsrfToken发送完整的表单数据。
标签: javascript ajax node.js express csrf-protection