2017-02-28 12 views
0

SQL 주입 증명을 쿼리하려고합니다. couchbase 표현식을 사용하여 사용자 입력으로 쿼리를 작성합니다.식에서 SQL 주입 보호

private GroupByPath getSearchStatement(SearchParams searchParams) { 
     String bucketName = asyncBucket.name(); 
     Expression expression = x("sample_id").eq(s(searchParams.getSampleId())); 
     String selectStatement = bucketName + ".*"; 
     return select(selectStatement) 
       .from(bucketName) 
       .where(expression); 
    } 

이 코드는 SQL 주입 안전합니까? 아니면 여분의 일을해야합니다.

+0

이것은 나에게 Couchbase처럼 보이지 않습니다. –

+0

@TimBiegeleisen 그래도. 'GroupByPath'는 Couchabse Java sdk 인터페이스입니다 - http://docs.couchbase.com/sdk-api/couchbase-java-client-2.2.8/com/couchbase/client/java/query/dsl/path/GroupByPath. html – nbokmans

+0

그것의 외형에 따라, ['s (..)'] (http://docs.couchbase.com/sdk-api/couchbase-java-client-2.3.5/com/couchbase/client /java/query/dsl/Expression.html#s-java.lang.String...-) 제대로 입력을 이스케이프 처리합니다. 그렇게 추측 하겠지만 그것은 단지 추측입니다. – zapl

답변

0

코드는 SQL 삽입을 방지 할 수있는 것처럼 보입니다. 매개 변수화 된 쿼리는이를 수행하는 또 다른 방법이며 준비된 쿼리에 대해보다 유연해야합니다.

간단한 예

N1qlQuery.parameterized("select * from myBucket where sample_id = $1", JsonArray.from(searchParams.getSampleId()));

그것은 위치 /라는 변수가 될 수있을 것이다.