我对krakenjs有疑问,我是节点/表达新手。
krakenjs设置为默认的csrf保护(我知道如何禁用,但我不想),但我不知道如何处理csrf并避免403错误。
在ejs文件中我得到了这一行。
<input type="hidden" name="_crsf" value="<%= _csrf %>" />
它生成正确的csrf,那里没有问题。
这是我的路线
server.post('/isengard/fact/new', function(req,res){
var new_fact = Fact({
title : req.body.fact_title,
description : req.body.fact_description,
source : req.body.fact_source
});
new_fact.save(function(err){
if(err) return handleError(err);
var model = {status:true};
res.render('isengard/create',model);
});
});
但是当我发送表格(POST)时,我收到了这个错误。
403 Error: Forbidden
at Object.exports.error (/Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/utils.js:63:13)
at createToken (/Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/middleware/csrf.js:82:55)
at /Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/middleware/csrf.js:48:24
at csrf (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:112:13)
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21
at xframe (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:131:9)
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21
at p3p (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:144:9)
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21
at Object.appsec (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:65:9)
谁能解释我如何处理csrf?
答案 0 :(得分:4)
实际上,你的问题是你有:
<input type="hidden" name="_crsf" value="<%= _csrf %>" />
而不是:
<input type="hidden" name="_csrf" value="<%= _csrf %>" />
请注意name
属性中的拼写错误。
答案 1 :(得分:1)
诀窍是你需要将你的POST测试包装在GET中并从cookie中解析必要的CSRF令牌。
答案 2 :(得分:1)
_csrf
)。
更多的信息会有很长的路要走(至少req / res标题但是an HAR会很棒)但是我可以看到一些可能发生这种情况的方法:
GET
和POST
之间的某个时间重新生成或删除了csrf 秘密(非令牌,请注意)。唯一可行的方法是在请求之间更改或删除会话中存储为_csrfSecret
的值。确保您的会话正常运行。其中一个安全标题让你感到悲伤。尝试使用middleware-development.json
中的以下内容暂时关闭它们
{
"middleware": {
"appsec": {
"csp": false,
"xframe": false,
"p3p": false
}
}
}
答案 3 :(得分:1)
除非您需要csrf保护,否则请将其放在config.json中以完全禁用它。 然后你的应用程序就会运行。
"middleware": {
"appsec": {
"priority": 110,
"module": {
"name": "lusca",
"arguments": [
{
"csrf": false,
"xframe": "SAMEORIGIN",
"p3p": false,
"csp": false
}
]
}
},
}