2017-02-28 8 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インジェクションを防ぐのに十分なようです。パラメータ化されたクエリは、これを実行するもう1つの方法である必要があります。

簡単な例では、それは、位置/名前付きパラメータのいずれかになります

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

だろう。

関連する問題