2

Java アプリケーション (SOLR) にヒットするクエリがあります。

クエリの特定のパターンは次のようになります

http:server:port/app/select?q=(skunum:(2809553163000\+OR+09552883000\+OR+09553124000\))

すべての項目番号の末尾にエスケープ文字があることに気付いた場合。

このタイプのクエリがアプリにヒットするのをブロックする必要があります。

これらの特定のクエリを識別する方法を知りたいだけですか? パターンマッチ句はありますか?

4

1 に答える 1

1

基本的に、文字列 (この場合は URL クエリ文字列) に一連の文字 (エスケープ文字) が含まれているかどうかを判断することが問題のようです。2つのアプローチが考えられます。1 つは、正規表現を使用することです。

// ignore queries containing a, b, or c in the query string
if (url.getQuery().matches("[abc]"))
{
    // ignore query
}

もう 1 つは、特定のセットから文字を検索する文字列を反復処理する関数を使用することです。ここでbool ContainsAny(String, char[])メソッドの例を見つけました。正規表現はより一般的な解決策ですが (特に初心者にとっては少し使いにくい)、この場合もこの方法で十分です。ContainsAny()

より大きな問題は、入力の検証です。これは、適切なアプリケーション機能だけでなく、セキュリティのためにも重要です。処理するすべてのクエリが仕様に一致し、意味のある値が含まれていることを確認するために、できる限りの手段を講じてください。これを容易にするために、Java または SOLR によって提供される API を探してください。

最後のポイント:あなたが提供した例では、そこに真の「エスケープ」が存在することは私には明らかではありません。各数字の後にバックスラッシュ ( ) が表示されますが、(および)\に続く文字はエスケープする必要がないため、これらは必ずしもエスケープではありません。実際、URL 内のスペースは、多くの場合、文字または.+)+%20

于 2013-02-27T01:16:16.240 に答える