1
我試圖在express中生成CSRF令牌。我檢查了相關的查詢,他們似乎都沒有幫助我。我在我的app.js下面的代碼使用csrf時禁止訪問(express + node)
var app = express();
var connect = require('connect');
// Disable CSRF for some requests
var conditionalCSRF = function (req, res, next) {
var whitelist = ['/login'];
if (req.method !== 'POST') {
next();
return;
}
if (whitelist.indexOf(req.url) !== -1) {
next();
} else {
//req.session._csrf || (req.session._csrf = connect.utils.uid(24));
(express.csrf())(req, res, next);
}
};
app.configure(function() {
app.use(passport.initialize());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(passport.session());
app.use(express.session({
secret: 'applecake',
key: 'sid',
cookie : {
maxAge : 604800,
path:"/"
}
}));
app.use(conditionalCSRF);
app.use(app.router);
app.use(express.errorHandler());
});
我的形式是一個簡單的形式,這樣
<form action="http://localhost:3000/conversationlist" method="post">
<div>
<input type="hidden" name="_csrf" value=token />
</div>
<div>
<input type="submit" value="Get ConversationList"/>
</div>
我登錄使用/登錄URI和工作正常,這是不CSRF保護的一部分。有一次,我嘗試任何其他URI,
我沒有看到CSRF令牌被設置,也是我收到一個消息,禁止
Express
403 Error: Forbidden
at Object.exports.error (C:\Career\Node.JS\ExpressCHLogging\node_modules\express\node_modules\connect\lib\utils.js:63:13)
at createToken (C:\Career\Node.JS\ExpressCHLogging\node_modules\express\node_modules\connect\lib\middleware\csrf.js:82:55)
at C:\Career\Node.JS\ExpressCHLogging\node_modules\express\node_modules\connect\lib\middleware\csrf.js:54:7
at Object.ondone (C:\Career\Node.JS\ExpressCHLogging\node_modules\express\node_modules\connect\node_modules\uid2\index.js:46:8)
爲什麼我收到禁止訪問任何想法。
你可以請你發佈你的路由處理程序,顯示你如何溝通'標記'到你的視圖? – juanpaco
app.post('/ sessionlist',ensureAuthenticated,function(req,res){ \t conversationlist.start(req,res,req.session.cn); });這就是我所嘗試的URL。對於身份驗證,我使用護照,並在/登錄期間被調用。 – user2731628
具體來說,你設置了'''token'從哪裏來?你是否在某個地方通過了「res.render」電話? – juanpaco