2014-11-11 18 views
6

Query - HttpSolrServer.Solrj enjeksiyon iğneleri kullanılarak solrj

SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery(q); 
QueryResponse queryResponse = solrServer.query(solrQuery); 

Ben gibi bir öğe bir Solr sorgu oluşturmak gerekir "yazar: * user_inputed_text * başlık: * user_inputed_text *" Ben PreparedStatement gibi bir şey ihtiyacım var ama solrj kütüphanede böyle bir şeyi bulamadık. Enjeksiyona neden olmayan sorgu nasıl oluşturulur? Kullanıcı tarafından girilen dize nasıl yapılır? \ User_input_text \ safe?

Birleştirme kullanarak sorgu yapıyorum. Örneğin ben bu kodu varsa:

public String buildQuery(String userInputedText) { 
    String query = "author:*" + userInputedText + "* OR title:*" + userInputedText + "*"; 
} 

Ardından kullanıcı bazı alt sorgu enjekte ve sonuçları alabilir, yani sınırlı değildir. Örneğin, giriş dizesi: "OR title:" idi. Yani, tüm sorgu şu şekilde olacaktır: yazar: * OR title: * VEYA title: * VEYA title: *

Bu durumda, kullanıcı tüm sonuçları (bunlarla sınırlı değildir) alır ve desen yazarını geçirir: *? * VEYA başlık: *? *.

+0

Sorun nedir? Sorunu açıklayın açıklayın – kirti

+0

Aslında, güvenli hale getirmeniz gerektiğini söyleyerek ne demek istediğiniz açık değil. Solr'da bir soruyu "güvensiz" yapmanın bir örneğini gönderebilir misiniz? Bir sorgu yapıyorsunuz, bu yüzden indekslerinize zarar vermek mümkün değil. Hedefiniz hakkında daha fazla ayrıntı vermelisiniz. – Max

cevap

6

Lütfen yerleşik bir solrj ClientUtils yardımcı program sınıfını kullanmayı düşünün. daha fazla detay queryparser syntax sayfada bakabilirsiniz için sayesinde hangi sen userInputText

String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText) 

kaçabilir.