2012-04-09 1 views
4

이전 SO 질문과 같이 express에서 csrf 미들웨어를 성공적으로 사용할 수있게되었습니다. 토큰을 잘 생성하지만 모든 양식 제출을 거부합니다.CSRF 미들웨어로 인해 문제가 발생합니다. Node.JS + Express

내가 볼 수있는 유일한 충돌은 세션에 redis를 연결 저장소로 사용하고 세션에 socket.io를 연결한다는 것입니다. 그러나 소켓 비트를 주석 처리했으며 여전히 좋지 않습니다.

내 미들웨어를 호출하는 명령이 여기에있을 수도 있습니다.

(커피 스크립트는)

app.configure -> 
    app.set 'views', __dirname + '/views' 
    app.set 'view engine', 'jade' 
    app.use express.bodyParser() 
    app.use express.methodOverride() 
    app.use express.cookieParser() 
    app.use express.session 
     secret: "itsasecret" 
     store: sessionStore 
    app.use express.csrf() 
    app.dynamicHelpers 
     token: (req, res) -> 
     req.session._csrf 
    app.use app.router 
    app.use express.static(__dirname + '/public') 

이 게시 된 데이터에 응답하는 길이다.

다음
app.post '/admin/logintry', (req, res) -> 
    if req.body.username is 'Tim' and req.body.password is 'TempPassword' 
     req.session.adminIn = true 
     res.redirect '/admin/home' 
    else 
     res.redirect '/admin/login?failed=true' 

의 형식은 페이지의 브라우저에 도달하는 HTML (이 아니다 개발 코드는 단지 나 학습 노드는 내가 온라인으로 넣을 경우이가 괴물이 될 것 잘 알고 있습니다) :

<input type="hidden" token="5ODFxml1QAhQvOmq1QE6Qd7n"> 

그리고 "/ 관리/logintry"로부터받은 응답 :

Forbidden 

N ew 노드, Express 및 SO, 최근 제대로 제대로 배운 자바 스크립트, 심지어 어디서부터 문제를 찾기 시작할 지 확신 할 수 없습니다. 어떤 도움도, 파고 시작하는 곳이라 할지라도 크게 감사합니다.

건배. 당신이 Connect - csrf documentation 보면

답변

4

, 토큰에 대한 input 태그는 다음과 같아야합니다 : 그래서

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

당신의 예 토큰 :

<input type="hidden" name="_csrf" value="5ODFxml1QAhQvOmq1QE6Qd7n" /> 

현재 연결 (Express는 아래에 연결을 사용 후드)가 "_csrf"라는 이름의 필드를 찾으려고하지만 양식에 존재하지 않기 때문에 찾을 수 없습니다. 따라서 액세스를 금지합니다.

+0

모두 지금 사용 중입니다. 이전 질문에 기초하여 고칠 때 이름을 꺼 냈습니다. 빠른 답변 감사합니다! –