Kraken.js CSRF处理
我有一个问题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?
其实你的问题是你有:
<input type="hidden" name="_crsf" value="<%= _csrf %>" />
代替:
<input type="hidden" name="_csrf" value="<%= _csrf %>" />
请注意name
属性中的拼写错误。
诀窍是你需要将你的POSTtesting封装在一个GET中,并从cookie中parsing出必要的CSRF标记。
以下是一个示例: https : //stackoverflow.com/a/18776974/1935918
kraken中的csrf几乎完全由csrf连接中间件处理(另外一个是将标记暴露给你的视图为_csrf
)。
多一点信息会有很长的路要走(至lessreq / res头文件,但HAR会很棒),但是我可以看到几种方法:
- csrf的秘密 (不是令牌,介意你)正在重新生成或删除一些时间之间的初始
GET
和POST
。 唯一可行的方法是在会话中存储为_csrfSecret
的值在请求之间被更改或删除。 确保你的会议正常工作。 -
安全标题之一是给你悲伤。 尝试在
middleware-development.json
暂时closures它们,如下所示:{ "middleware": { "appsec": { "csp": false, "xframe": false, "p3p": false } } }
除非你需要csrf保护,否则把它放在你的config.json中,完全禁用它。 然后,您的应用程序将以其他方式运行。
"middleware": { "appsec": { "priority": 110, "module": { "name": "lusca", "arguments": [ { "csrf": false, "xframe": "SAMEORIGIN", "p3p": false, "csp": false } ] } }, }