2014-11-11 14 views
6

Query su HttpSolrServer.Previene da iniezioni di query solrj quando si utilizza solrj

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

Ho bisogno di costruire una query solr, qualcosa come "autore: * user_inputed_text * Titolo: * * user_inputed_text" ho bisogno di qualcosa come PreparedStatement, ma non riuscivo a trovare qualcosa di simile in solrj biblioteca. Come costruire una query che non contenga injectionint? Come rendere la stringa inserita dall'utente - \ user_input_text \ safe?

Sto costruendo una query utilizzando la concatenazione. Quando ho, per esempio questo codice:

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

allora l'utente può iniettare qualche subquery e ricevere i risultati, che non è limitato. Ad esempio, la stringa inserita era: "OR title:". Quindi, l'intera query sarà: autore: * OR titolo: * OR titolo: * OR titolo: *

In questo caso l'utente riceve tutti i risultati (non sono limitati) e passa all'autore del modello: *? * OR titolo: *? *.

+0

qual è il problema ... Spiega il problema che stai affrontando – kirti

+0

In realtà non è chiaro per me cosa intendi dire che devi renderlo sicuro. Potresti per favore pubblicare un esempio su come rendere "non sicuro" una query su Solr? Stai eseguendo una query, quindi non è possibile danneggiare i tuoi indeces. Penso che dovresti dare maggiori dettagli sul tuo obiettivo. – Max

risposta

6

Si prega di considerare l'uso di una classe di utilità solrj ClientUtils integrata. Per mezzo del quale si può sfuggire userInputText

String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText) 

Per maggiori dettagli date un'occhiata alla pagina di queryparser syntax.