Solrj

2014-11-11 11 views
6

HttpSolrServer के लिए क्वेरी का उपयोग करते समय, सौर क्वेरी इंजेक्शन से रोकें।Solrj

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

मैं एक Solr क्वेरी, कुछ तरह का निर्माण करने की आवश्यकता है "लेखक: * user_inputed_text * शीर्षक: * user_inputed_text *" मैं PreparedStatement की तरह कुछ की जरूरत है, लेकिन मैं solrj पुस्तकालय में ऐसा ही कुछ भी नहीं मिला। क्वेरी का निर्माण कैसे करें जो इंजेक्शन को दूषित नहीं करेगा? उपयोगकर्ता द्वारा इनपुट स्ट्रिंग कैसे करें - \ user_input_text \ safe?

मैं concatenation का उपयोग कर क्वेरी का निर्माण कर रहा हूँ। जब मैं, उदाहरण के लिए इस कोड है:

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

तो उपयोगकर्ता कुछ सबक्वेरी इंजेक्षन और परिणाम प्राप्त कर सकते हैं, कि सीमित नहीं है। उदाहरण के लिए इनपुट स्ट्रिंग था: "या शीर्षक:"। तो, पूरी क्वेरी होगी: लेखक: * या शीर्षक: * या शीर्षक: * या शीर्षक: *

इस मामले में उपयोगकर्ता को सभी परिणाम प्राप्त होते हैं (वे सीमित नहीं हैं) और पैटर्न लेखक को पास करते हैं: *? * या शीर्षक: *? *।

+0

समस्या क्या है ... समस्या का सामना करें जो आप सामना कर रहे हैं – kirti

+0

असल में यह मुझे स्पष्ट नहीं है कि आप क्या कह रहे हैं कि आपको इसे सुरक्षित करने की आवश्यकता है। क्या आप सोलर पर एक प्रश्न "असुरक्षित" बनाने का उदाहरण पोस्ट कर सकते हैं? आप एक प्रश्न कर रहे हैं, इसलिए अपने indeces को नुकसान पहुंचाना संभव नहीं है। मुझे लगता है कि आपको अपने लक्ष्य के बारे में अधिक जानकारी देना चाहिए। – Max

उत्तर

6

कृपया अंतर्निहित solrj ClientUtils उपयोगिता वर्ग के उपयोग पर विचार करें। माध्यम से जो तुम userInputText

String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText) 

बचने के अधिक जानकारी के लिए queryparser syntax पृष्ठ पर एक नज़र ले जा सकते हैं।

संबंधित मुद्दे