【问题标题】:CSURF returns EBADCSRFTOKEN while the token is written wrongCSURF 在令牌写入错误时返回 EBADCSRFTOKEN
【发布时间】:2021-05-05 18:08:22
【问题描述】:

我正在使用 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();
});

【问题讨论】:

    标签: javascript node.js ajax ejs csrf


    【解决方案1】:

    您会在模板中看到 &lt;p&gt; 内的换行符和空格。您可以使用.trim() 删除它们:

    const csurf = document.getElementById("csurf").innerText.trim();
    

    您也可以删除换行符和空格:

    <p id="csurf" style="display: none;"><%=csurf%></p>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 2020-07-09
      • 1970-01-01
      • 2021-08-19
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      相关资源
      最近更新 更多