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

它可以是位置/命名参数。