2014-11-11 3 views
6

Abfrage auf HttpSolrServer.Verhindern von Solr-Abfrage Injektionen, wenn Solrj verwenden

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

Ich brauche eine solr Abfrage, so etwas wie zu bauen "Autor: * user_inputed_text * Titel: * user_inputed_text *" Ich brauche so etwas wie PreparedStatement, aber ich konnte nicht so etwas wie die in solrj Bibliothek. Wie erstellt man eine Abfrage, die keine Injektion enthält? Wie man die Zeichenkette einführt, die vom Benutzer eingegeben wird - \ user_input_text \ safe?

Ich konstruiere Abfrage mit Verkettung. Wenn ich zum Beispiel diesen Code:

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

Dann Benutzer eine Unterabfrage injizieren kann und die Ergebnisse erhalten, dass ist nicht beschränkt. Zum Beispiel eingegebene Zeichenfolge war: "ODER Titel:". Also, die ganze Abfrage wird: Autor: * OR Titel: * OR Titel: * OR Titel: *

In diesem Fall erhält der Benutzer alle Ergebnisse (sie sind nicht begrenzt) und übergibt das Muster Autor: *? * ODER Titel: *? *.

+0

was ist das Problem ... Erklären Sie das Problem Sie stehen vor – kirti

+0

Eigentlich ist es nicht klar für mich, was Sie sagen sagen, dass Sie es sicher machen müssen. Könnten Sie bitte ein Beispiel veröffentlichen, wie man eine Anfrage auf Solr "unsicher" macht? Sie führen eine Abfrage durch, es ist also nicht möglich, Ihre Indizien zu beschädigen. Ich denke, du solltest mehr über dein Ziel erzählen. – Max

Antwort

6

Bitte beachten Sie die Verwendung einer integrierten Solrj ClientUtils Utility-Klasse. Mit deren Hilfe können Sie userInputText

String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText) 

entkommen Für weitere Informationen einen Blick auf die Seite queryparser syntax nehmen.