2012-04-09 11 views
4

以前のSOの質問に従って、Expressで動作するcsrfミドルウェアを正常に取得しました。それはすべてのフォームの提出を拒否していますが、トークンをうまく生成しています。CSRFミドルウェアが問題を引き起こしていますNode.JS + Express

私が見ることのできる唯一の可能性のある競合は、私はredisをセッションストアとして使用していますが、セッションにconnect-redisとsocket.ioを接続していますが、私はソケットビットをコメントアウトしています。

これは私のミドルウェアと呼んでいる順序は、おそらくここでうんざりですか?

(CoffeeScriptの)

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 Node、Express、そしてSOへのew、ちょうど最近、適切に学んだjavascript、どこで問題を探し始めるのか不明。どの援助も、掘り出しを始める場所でさえも大いに感謝します。

乾杯。

答えて

4

あなたはConnect - csrf documentationを見れば、トークンのinputタグは次のようになります。

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

だからあなたの例トークンで:

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

現在の接続(Expressは、下の接続を使用していますフード)は "_csrf"という名前のフィールドを検索しようとしていますが、あなたのフォームに存在しないため、フィールドを見つけることができません。したがって、アクセスを禁止します。

+0

すべて機能しています。以前の質問に基づいて修正するときに名前を取り出した。早速のご返事ありがとうございます! –

関連する問題