2011-09-23 6 views
8

좋아요. 그래서 AJAX를 통해 nodejs 백엔드에 POST되는 JS 객체가 있습니다. 객체 키가 이미 db 스키마와 완벽하게 일치하므로이 js 객체를 내 몽구스 db에 직접 삽입하고 싶습니다.몽구스 : db 객체를 db에 직접 삽입

내가 현재 가지고이 (역동적이고 지나치게 복잡하지 않음) :

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 

    formContents.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 
+2

* "좋아, 그렇게 i를 nodejs 백 엔드에 AJAX를 통해 게시되고있는 JS 객체가. 나는 객체 키가 이미 DB 스키마와 완벽하게 일치로이 내 몽구스 DB에 직접 객체 JS 삽입 할이 "* [SQL 주입] (http://en.wikipedia.org/wiki/SQL_injection)과 비슷한 일종의 사출 공격을위한 ** 우수한 ** 벡터처럼 들립니다. 전송하기 전에 항상 서버에서 데이터를 처리하고 유효성을 검사하는 것이 좋습니다. 클라이언트는 신뢰할 수 없습니다. –

+2

예 알아요. 이것은 테스트 케이스입니다. 그것은 내 질문이 아니었다. – wilsonpage

+0

그래서 항상 데이터를 검증해야하므로 나쁜 테스트 케이스입니다. 현재 비슷한 컨텍스트에서 작업 중이며 데이터 유효성 검사를 위해 validate.js를 성공적으로 테스트했습니다. –

답변

9

:

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 
     itemModel = db.model('item'), 
     newitem = new itemModel(); 

    newitem.item_ID   = ""; 
    newitem.item_title  = formContents.item_title; 
    newitem.item_abv  = formContents.item_abv; 
    newitem.item_desc  = formContents.item_desc; 
    newitem.item_est  = formContents.item_est; 
    newitem.item_origin  = formContents.item_origin; 
    newitem.item_rating  = formContents.item_rating; 
    newitem.item_dateAdded = Date.now(); 

    newitem.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 

그러나이 (섹시하고 동적)처럼 뭔가를 아래로 다듬을 몽구스 (http://tomblobaum.tumblr.com/post/10551728245/filter-strict-schema-plugin-for-mongoose-js)와 같은 플러그인을 사용하면 newitem[item_title]newitem[item_abv] 또는와 같이 배열에 배열을 넣을 수 있습니다.및 item[abv]

요소가 일치하면 req.body 전체를 전달할 수도 있습니다. 그 MongooseStrict 플러그인은 스키마에 명시 적으로 설정되지 않은 값을 걸러 내지 만, 검사 유형과 유효성 검사는 여전히 몽구스 상태입니다. 스키마에 적절한 유효성 검사 메소드가 설정되어 있으면 모든 주입 공격으로부터 안전합니다.

편집 : 플러그인을 구현했다고 가정하면이 코드를 사용할 수 있습니다.

app.post('/items/submit/new-item', function(req, res){ 
    new itemModel(req.body.formContents).save(function (e) { 
    res.send('item saved'); 
    }); 
}); 
+0

플러그인을 요구하지 않고도 설명한 방법 덕분에 감사합니다. 보안을 확실히하기 위해 필히 추가 날짜에 구현해야합니다. 이처럼 재정의 할 수 있다면 스키마의 요점은 무엇입니까? 입력 검증의 다른 방법은 무엇입니까? – wilsonpage

+0

스키마는 몽구스에서 많은 일을합니다. 가장 중요한 것은 유형을 mongodb에 적절히 저장하지만 유효성 검사, 기본값 및 기타 ODM 작업을 설정할 수도 있습니다. 현재 몽구스 문서의 최상위 레벨은 본질적으로 "Mixed"유형처럼 처리됩니다 (어떤 것도 받아들이며 업데이트 된 속성이 스키마의 속성과 일치 할 때만 처리합니다). 플러그인은 몽구스가 속성을 받아들이도록합니다 스키마에서 –

+0

mySQL 배경에서 나는 몽구스를 완전히 이해하기 위해 고심하고있다. 문서는 나에게 분명하지 않습니다. 몇 가지 리소스 나 예제를 추천 해 주실 수 있습니까? 나는 진보 된 것을 아무것도하지 않을 것입니다. – wilsonpage