如何安全地在* SQL查询中使用*作为通配符

时间:2012-08-14 06:59:50

标签: java sql hibernate

我需要实现一个搜索,用户可以输入*作为外卡。他们正在搜索的数据库是SQL服务器。我只想用*替换*:

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

我很担心,因为我“手工”这样做,我可能会引入一些错误或安全漏洞。你觉得这样做有什么问题吗?有没有图书馆可以帮我这么做?

我使用Hibernate作为ORM映射器和Criteria API来创建查询,如果它有助于解答。

2 个答案:

答案 0 :(得分:2)

这正是我们在公司所做的事情。我们有两个产品,一个在代码中使用简单替换,就像您的示例一样。另一个非常存储过程的程序在“搜索”存储过程本身内进行。

无论哪种方式,我们都没有任何安全问题或用户对系统的投诉。

只是为了显示存储过程布局,但可能是多余的,如您所说的使用ORM:

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

SET @name = REPLACE(@name, '*', '%')

答案 1 :(得分:2)

如果该表中的所有数据都是基于此搜索值公开的,我认为将*更改为%不会导致任何问题。还有similar topic对sql示例有更多的正则表达式。

这将使您的应用程序比使用database vendror-specific regexp matching mechanism更加独立。