2013-07-17 43 views
1

我正在使用node.js並表示構建一個簡單的服務器,其中CSRF正通過快速框架進行實施。內置CSRF保護的node.js服務器,移動應用程序如何接收CSRF令牌?

app.use(express.csrf()); 
app.use(function(req, res, next){ 
    res.locals.token = req.session._csrf; 
    res.locals.year = new Date().getFullYear(); 
    next(); 
}); 

的連接CSRF中間件自動生成req.session._csrf令牌,而這個函數映射它res.locals.token所以這將是可從EJS的模板。這適用於Web應用程序。

但是,當涉及到我的Android的移動應用程序,例如登錄,只發送用戶名和密碼沒有CSRF令牌將導致服務器拒絕請求。

如前面的代碼僅適用於網頁模板,所以我的問題是如何獲得這個令牌在支持Android應用程序

最佳RGDS 十一

回答

2

如果是隻需要在登錄頁面保護,那麼您可以輕鬆地爲登錄頁面(它返回JSON或XML)輕鬆完成GET,然後以這種方式獲取CSRF標記。

但是,我認爲CSRF對移動設備不是問題。你可以做的是使用cookiesession中間件在會話上設置一個標誌來表明這種類型的客戶端不需要CSRF。

然後使用此回答Disable csrf validation for some requests on Express開啓或關閉CSRF,具體取決於該標誌是否存在於Cookie中。

或者,您的移動應用程序可以爲每個請求網址添加一個標記,而不是使用cookie方法表示它不需要CSRF。然而,這意味着如果黑客知道這個標誌,他們可以繞過你的CSRF保護。

+0

我的例子中的移動應用程序是原生移動應用程序,但正如您所建議的那樣,也許原生移動應用程序沒有CSRF的問題,CSRF適用於基於Web /瀏覽器的應用程序。打開/關閉CSRF是一個好主意,所以如果我們發現請求來自本地移動應用程序,我們可以關閉CSRF,對吧? – user824624

+0

正確。你只需要確保黑客無法輕易關閉它 – AndyD