2014-07-24 1 views
1

오랜 시간 동안 웹 개발자로서 모든 것에 대한 나의 평소의 대답은 사용자 입력을 왜곡시키는 RegEx 검사를 사용하는 것입니다. 내가 몽구스 질문을보고있을 때, 내 직감은 길이 검사를 가정 할 때 입력을 왜곡 할 필요가 없다고 말하고 있습니다.보안을 위해 몽구스에서 사용자 쿼리를 변형하거나 필터링해야합니까?

이것은 express 프레임 워크가 req.body 또는 req.query에 대한 입력을 이미 필터링했다고 가정합니다.

User.findOne({ username : req.query.username }, function(err, doc) { 
    // code 
}); 

그것이 가능이 특정 쿼리에 나쁜 일을 주입 :

는 예를 들어, 일반적인 쿼리는 몽구스의 있도록처럼 될 수 있을까? 해커들이 항상 아주 영리한 일을하고있는 것 같아서이 예를보고 싶습니다. 이것은 문자열 연결 또는 문자열 정의가 아닌 개체를 사용하는 대신 문자열 연결을 수행하지 않는 다른 방법과 다릅니다. 감사!

주제를 벗어난 경우이 부분을 옮기십시오.이 부분을 묻는 질문에 대해서는 사전에 사과드립니다.

답변

2

req.query.username이 예상되는 값 (문자열과 같음) 일 때도 안전합니다. 내부의 JSON을 평가하지 않습니다. req.query.usernameObject 인 경우 { '$exists': true } 평가되고 예기치 않은 문서가 반환됩니다.

당신의 findOne 예제는 당신이 패스워드의 검증에 잘못 될 것이므로 상당히 안전합니다. .remove()와 같은 다른 쿼리를 사용하면 훨씬 위험합니다.

var param = { '$exists': true }; 

User.remove({ username : param }, function (err, affected) { 
    console.log(err) 
    console.log(affected) 
}); 

이 컬렉션의 모든 사용자 삭제합니다 :

가 도움을합니까를?


편집 : PHP and Mongo로 작업 할 때 비슷한 문제가 있습니다

. 대부분은 입력 매개 변수로 객체를 만들지 않는 표현 프레임 워크에 달려 있습니다.

+0

+1 이것은 내가 생각하고있는 것입니다. 나는 누군가가 따라 와서 나의 직접적인 예를 사용 함에도 불구하고 내가 알지 못했던 착취를 보여 주길 바란다. 이틀 후에 일어날 일이 없다면 내가 확인할거야, 저스틴. –

관련 문제