2017-02-28 54 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()));

它可以是位置/命名參數。