2013-11-21 13 views
6

tôi có vấn đề với krakenjs, tôi là một nút/người mới thể hiện.Kraken.js CSRF Xử lý

krakenjs được đặt thành mặc định bảo vệ csrf (tôi biết cách tắt, nhưng tôi không muốn), nhưng tôi không biết cách xử lý csrf và tránh lỗi 403.

trong tệp ejs tôi nhận được dòng này.

<input type="hidden" name="_crsf" value="<%= _csrf %>" /> 

nó tạo ra csrf thích hợp, không có vấn đề gì trong đó.

và đây là con đường của tôi

server.post('/isengard/fact/new', function(req,res){ 
    var new_fact = Fact({ 
     title : req.body.fact_title, 
     description : req.body.fact_description, 
     source : req.body.fact_source 
    }); 
    new_fact.save(function(err){ 
     if(err) return handleError(err); 
     var model = {status:true}; 
     res.render('isengard/create',model); 
    }); 
}); 

nhưng khi tôi gửi mẫu (POST), tôi nhận được lỗi này.

403 Error: Forbidden 
at Object.exports.error (/Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/utils.js:63:13) 
at createToken (/Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/middleware/csrf.js:82:55) 
at /Users/onur/Documents/node/sage/node_modules/express/node_modules/connect/lib/middleware/csrf.js:48:24 
at csrf (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:112:13) 
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21 
at xframe (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:131:9) 
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21 
at p3p (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:144:9) 
at /Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:60:21 
at Object.appsec (/Users/onur/Documents/node/sage/node_modules/kraken-js/node_modules/lusca/index.js:65:9) 

mọi người có thể giải thích cho tôi cách xử lý csrf không?

Trả lời

4

Trên thực tế, vấn đề của bạn là bạn phải:

<input type="hidden" name="_crsf" value="<%= _csrf %>" /> 

thay vì:

<input type="hidden" name="_csrf" value="<%= _csrf %>" /> 

Lưu ý lỗi đánh máy trong thanh ghi name ute.

+0

Jean-Charles thêm bình luận hữu ích, nhưng đây là câu trả lời đúng cho bài đăng gốc. –

+0

Tôi có thể đọc về nó ở đâu? Không có thông tin về cách cấu hình nó. – Green

1

CSRF trong Kraken là khá nhiều hoàn toàn xử lý bởi các CSRF kết nối trung gian (với một Ngoài việc phơi bày các dấu hiệu để quan điểm của bạn như _csrf).

Một chút biết thêm thông tin sẽ đi một chặng đường dài (req/res tiêu đề tại ít nhất nhưng an HAR sẽ là tuyệt vời) nhưng tôi có thể thấy một vài cách này có thể xảy ra:

  1. Các CSRF bí mật (không mã thông báo, nhớ bạn) đang được khôi phục hoặc xóa một số thời gian giữa số GETPOST ban đầu. Cách duy nhất có thể là nếu giá trị được lưu trữ là _csrfSecret trong phiên được thay đổi hoặc bị xóa giữa các yêu cầu. Đảm bảo phiên của bạn đang hoạt động bình thường.
  2. Một trong các tiêu đề bảo mật đang khiến bạn đau buồn. Hãy thử biến chúng tắt tạm với một cái gì đó như sau trong middleware-development.json của bạn:

    { 
        "middleware": { 
        "appsec": { 
         "csp": false, 
         "xframe": false, 
         "p3p": false 
        } 
        } 
    } 
    
+0

Cách định cấu hình? Tôi có thể đọc nó ở đâu? Không có thông tin – Green

+0

Trong phiên bản câu trả lời này được đề cập đến, cấu hình đã được đặt trong 'config/middleware.json'. Bảo mật được xử lý bởi [lusca] (https://github.com/krakenjs/lusca).Trong kraken hiện tại (v1.0.x), cấu hình được đặt trong ['config/config.json'] (https://github.com/krakenjs/kraken-js/blob/4ae1cc4d88d7be6ff4f81a25ed718ea8df21fa1e/config/config.json#L122 -L136) –

1

Trừ khi bạn cần bảo vệ CSRF, hãy đặt điều này trong tệp config.json của bạn để tắt hoàn toàn. Sau đó, ứng dụng của bạn chạy theo cách khác.

"middleware": {   
     "appsec": { 
     "priority": 110, 
     "module": { 
      "name": "lusca", 
      "arguments": [ 
       { 
        "csrf": false, 
        "xframe": "SAMEORIGIN", 
        "p3p": false, 
        "csp": false 
       } 
      ] 
     } 
    }, 
}