2014-01-20 3 views
1

express에서 CSRF 토큰을 생성하려고합니다. 나는 관련 질의를 확인했고 그들 중 누구도 나를 도와주는 것 같지 않습니다. 나는csrf (익스프레스 + 노드)를 사용할 때 금지 된 액세스

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()); 
}); 

내 폼이 나는이/URI에 로그인하여 로그인이

<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> 

같은 간단한 형태로 내 app.js에 아래의 코드를 가지고 그것은하지 않은 잘 작동 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) 

에게 내가 액세스 금지받을 이유는 어떤 생각을받을 수 있습니다.

+0

토큰을보기에 전달하는 방법을 보여주는 경로 처리기를 게시 할 수 있습니까? – juanpaco

+0

app.post ('/ conversationlist', 인증 된 함수, req, res) { \t conversationlist.start (req, res, req.session.cn); }}); 이것은 제가 시도하고있는 URL에 대한 것입니다. 인증을 위해 나는 여권을 사용하며/login 중에 호출됩니다. – user2731628

+0

특히''토큰은 어디에서 왔습니까? 당신이 그것을 넘겨 준 어딘가에서'res.render' 콜을 가지고 있습니까? – juanpaco

답변

0

렌더링 엔진에서 token 변수를 사용할 수 있는지 확인하십시오. 당신이 꿀꺽 꿀꺽를 사용하는 경우

예를 들어, 다음과 같이 중괄호로 포장해야합니다

<input type="hidden" name="_csrf" value={{ token }} /> 

당신은 토큰이 제대로 생성되었는지 확인 할 수있는 브라우저에서 양식을 열어 및 페이지 소스 코드를보고 있습니다. csrf 값이 올바르게 지정되면 token 대신 표시됩니다. 그렇지 않으면 비어있게됩니다.

관련 문제