6

ユーザーが * をワイルドカードとして入力できる検索を実装する必要があります。彼らが検索しているデータベースは SQL サーバーです。* を % に置き換えることを考えていました:

userInput = userInput.replace('*', '%');

これを「手作業」で行っているため、バグやセキュリティ上の欠陥が発生するのではないかと心配しています。このようにして何か問題はありますか?私のためにこれを行うライブラリはありますか?

Hibernate を ORM マッパーとして使用し、Criteria API を使用して、回答に役立つ場合はクエリを作成します。

4

2 に答える 2

2

それがまさに私たちの会社で行っていることです。2 つの製品があります。1 つは、例のようにコードで単純な置換を使用します。非常に重いストアド プロシージャであるもう 1 つは、「検索」ストアド プロシージャ自体の中で実行されます。

いずれにせよ、セキュリティの問題やシステムに関するユーザーからの苦情はありません。

ストアド プロシージャのレイアウトを表示するだけですが、ORM を使用していると述べたように、おそらく冗長です。

CREATE PROC [dbo].[p_aaa]
    @username nvarchar(100) = 'dbo',
    @rows int = 0,
    @name nvarchar(100) = '%'       
AS

SET @name = REPLACE(@name, '*', '%')
于 2012-08-14T07:25:30.037 に答える
2

この検索値に基づいてそのテーブル内のすべてのデータが公開されている場合、 * を % に変更しても問題はないと思います。SQL の例に対するより多くの正規表現を含む同様のトピックもあります。

これにより、アプリケーションは、データベース ベンダー固有の正規表現マッチング メカニズムを使用するよりも独立したものになります。

于 2012-08-14T07:38:12.113 に答える