5


5

私はレール上のルビーとsolrを使用しています。 それはすべてうまくいっています、私はユーザー入力をサニタイズする既存のコードがあるかどうかを知る必要があります。 または*

3 Answer


7


これを実行するコードはわかりませんが、理論的にはhttp://svn.apache.org/repos/asf/lucene/java/trunk/src/java/org/apache/luceneを見ることによって実行できます。 /queryParser/QueryParser.java [Luceneでコードを解析する]および「throw new ParseException」を検索します(16件のみ一致)。

実際には、コード内のsolr例外をキャッチして、 "invalid query"メッセージなどを表示するだけの方が得策です。

*編集:*これが "消毒剤"です。


3


http://wiki.apache.org/solr/SolrSecurity[Sol Security]]および http://wiki.apache.org/solr/SolrSecurity[Sol Query Syntax] wikiページが関連しているかもしれません。


1


PHPでhttp://www.solarium-project.org/[Solarium]を使用している場合は、 `Solarium_Escape

term()`メソッドを使用できます。

/**
 * Escape a term
 *
 * A term is a single word.
 * All characters that have a special meaning in a Solr query are escaped.
 *
 * If you want to use the input as a phrase please use the {@link phrase()}
 * method, because a phrase requires much less escaping.\
 *
 * @link http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters
 *
 * @param string $input
 * @return string
 */
static public function term($input)
{
    $pattern = '/(\+|-|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\\)/';

    return preg_replace($pattern, '\\\$1', $input);
}