2015-01-16 2 views
2

MongoDB에서 spring을 사용하여 새로운 기능입니다.SQL 삽입을 피하기 위해 mongodb 이스케이프 매개 변수 용 스프링

MongoOperations 객체를 사용하는 Dao 패턴을 사용하고 있습니다.

저는 RDBMS와 JPA에 대한 많은 경험을 가지고 있으며, 보통 SQL 주입을 피하고 피하는 돌봐주는 setParameter를 사용합니다.

봄이되면 MongoDB에 그런 생각이 있으면 궁금합니다. 나는 그것을 발견 할 수 없지만 나는 뭔가를 놓칠지도 모른다. Mongo를 사용하는 SQL 주입 위험이 있는지 아직 확실하지 않습니다.

또한 MongoDB에서 Named Queries를 만드는 방법이 있습니까?

감사합니다.

답변

0

Mongo는 SQL 언어를 전혀 사용하지 않기 때문에 Mongo에는 SQL 삽입과 같은 것이 없습니다.

대신 당신이 @Query와 저장소 방법에 주석을 사용, 봄 데이터 MongoDB의에서 명명 된 쿼리의 개념이 없습니다 :

NOSQL 주입입니다 SQL 주입과 매우 유사 뭔가가있다
public interface PersonRepository extends MongoRepository<Person, String> 

    @Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}") 
    List<Person> findByThePersonsFirstname(String firstname); 
} 
+1

안녕하세요. 빠른 답변 감사드립니다. MongoRepository를 사용하지 않고 있습니다. MongoOperations를 사용하여 실행하는 메소드 세트와 함께 자체 DAO 인터페이스를 사용하고 있습니다. 나는 mongo (http://docs.mongodb.org/manual/faq/developers/#how-does-mongodb-address-sql-or-query-injection 참조)에서 위험과 같은 주사가 있다는 것을 읽었지 만 그들은 Criteria.where (PROPERTY) .is (VALUE)를 사용할 때주의를 기울인다 고 가정합니다. - is 메소드가이를 처리한다고 가정합니다. 그러나 아직도 나는 그것을 스스로하는 법을 찾을 수 없었다. – user1002065

+0

SQL 주입에 대한 개념은 없지만 유사한 개념이 있습니다. 문자열이 "내 문자열의"문자 인 경우 이스케이프 처리하지 않으면 쿼리가 중단됩니다.비슷한 개념이 없다고 말하는 것은 사실이 아닙니다. –

0

.
특수 문자는 다르지만 개념은 동일합니다 : 사용자가 요청을 제어/수정/손상시킬 수 있습니다.

그러나 이러한 데이터베이스는 기존 SQL 구문을 사용하지 않아도 주입 공격에 취약 할 수 있습니다. 이러한 NoSQL에 주입 공격은 절차 적 언어 내에서 실행 할 수 있기 때문에, 오히려 선언적 SQL 언어에 비해 잠재적 영향은 테스트에 도움이 기존의 SQL 주입

확인하는 방법이 있습니다, here is an OWASP page보다 큰.

기본적으로 귀하의 요청이 정확하게 ' " \ ; { } 및 그 이상을 벗어날 수 있는지 확인하는 것입니다.

스프링 데이터 mongodb가 올바르게 이스케이프 처리 된 것으로 보이지만 완전히 안전한지 전혀 알 수 없습니다.

명명 된 쿼리에 대해서는 this answer이 정확하고 저장소가없는 경우에도 여전히 @Query 주석이 있다고 생각합니다.

맞춤 저장소를 사용한다고해서 저장소 인터페이스를 사용할 수 없다는 것을 의미하지는 않습니다. 스프링 데이터를 사용하면 구현하지 않고 repostiroy를 구현할 수 있습니다 (see here).

관련 문제