javascript - CSURF 在令牌写入错误时返回 EBADCSRFTOKEN
问题描述
我正在使用 csurf 来防止 csrf 攻击。
现在由于某种原因,由于以下错误,请求停止工作:
message: 'invalid csrf token', code: 'EBADCSRFTOKEN'
现在我检查了什么是 csrf 令牌,我得到了一些奇怪的东西:
{ csrfToken:
'\n miXCD9Di-HtygtQPxEVhUETpYQDHrKM5auE8\n ' }
通常应该是:
{ csrfToken:'miXCD9Di-HtygtQPxEVhUETpYQDHrKM5auE8'}
现在我到处检查,但似乎找不到导致这种情况的原因。
这是一些源代码:EDIT.EJS:
<p id="csurf" style="display: none;">
<%=csurf%>
</p>
批准.JS:
const csurf = document.getElementById("csurf").innerText.toString();
//more functionality
const data = {
name: bizName.value,
email: bizEmail.value,
location: getlocation(),
owner: {
firstName: ownerFname.value,
lastName: ownerLname.value,
},
phone: phone.value,
website: bizUrl.value,
category: selectedCat,
logo: logoImage,
_csrf: csurf, //here i send it to the server
};
BUSINESS.JS //服务器端代码
res.render("business/admin/edit", {
title: `Edit ${doc.name}`,
csurf: req.csrfToken(),
biz: { ...doc, id: paramId },
});
APP.JS //这里是错误处理程序和设置
const session = require("express-session");
const csurf = require("csurf");
const flash = require("connect-flash");
var cookieParser = require("cookie-parser");
const csrfMiddleware = csurf({
cookie: true,
});
app.use(csrfMiddleware);
// error handler
app.use(function (err, req, res, next) {
console.log(err);
if (err.code !== "EBADCSRFTOKEN") return next(err);
// error handler
console.log(req.cookies._csrf);
var csrfToken = req.body._csrf.toString();
console.log({csrfToken});
// handle CSRF token errors here
res.status(403);
logger.warn(`Bad CSRF token: ${req.connection.remoteAddress}`);
res.json({ message: "form tampered with", success: false });
next();
});
解决方案
您会看到<p>
模板中的换行符和空格。您可以只使用.trim()
删除它们:
const csurf = document.getElementById("csurf").innerText.trim();
您也可以只删除换行符和空格:
<p id="csurf" style="display: none;"><%=csurf%></p>
推荐阅读
- azure - 为 VueJs 前端和 Azure 函数应用程序后端实现身份验证/授权的最佳方法是什么
- android - 访问单例中的应用程序上下文
- chef-infra - Chef:是否可以定义一个使用模板的 Chef 资源,并从另一个食谱中调用它?
- ios - 摆脱 Bolts 框架中的 UIWebView(解析框架依赖)
- laravel - 按钮打开新窗口
- ios - 拦截 iOS 深层链接
- esp32 - ESP32 的有限闪存低于声明为 SPIFFS 的 4mb
- c - 获得段错误
- c# - 验证 Zip 文件夹中的内容是否存在于 XML 元数据中且没有差异
- excel - Excel - VBA 宏 - 在特定工作表处停止代码