我需要实现一个搜索,用户可以输入 * 作为通配符。他们正在搜索的数据库是 SQL 服务器。我正在考虑将 * 替换为 %:
userInput = userInput.replace('*', '%');
我担心由于我是“手动”执行此操作,因此可能会引入一些错误或安全漏洞。你看到这样做有什么问题吗?有没有图书馆可以为我做这件事?
我使用 Hibernate 作为 ORM 映射器和 Criteria API 来创建查询(如果它有助于回答)。
这正是我们在公司所做的。我们有两种产品,一种像您的示例一样在代码中使用简单替换。另一个非常重的存储过程在“搜索”存储过程本身中执行。
无论哪种方式,我们都没有遇到任何安全问题或用户对系统的投诉。
只是为了显示存储过程布局,但正如您所说的使用 ORM 可能是多余的:
CREATE PROC [dbo].[p_aaa]
@username nvarchar(100) = 'dbo',
@rows int = 0,
@name nvarchar(100) = '%'
AS
SET @name = REPLACE(@name, '*', '%')
我相信将 * 更改为 % 不会导致任何问题,如果该表中的所有数据基于此搜索值都是公开的。还有类似的主题,其中有更多的正则表达式到 sql 示例。
这将使您的应用程序比使用数据库供应商特定的正则表达式匹配机制更加独立。