【发布时间】:2015-11-14 15:16:08
【问题描述】:
在存储过程中将参数值与 % 连接是否可以防止 SQL 注入?
我有一个存储过程,允许用户在表的列中搜索包含给定值的记录:
CREATE PROC sp_Search
@SearchValue NVARCHAR(255)
AS
BEGIN
SELECT * FROM TableA WHERE ColumnA LIKE '%' + @SearchValue + '%' OR ColumnB LIKE '%' + @SearchValue + '%'
END
【问题讨论】:
-
是的。您只是在比较一个值。问题是当您尝试创建动态 sql 时。
-
我会推荐两件事。不要添加 sp_ 前缀。要么选择不同的前缀,要么完全放弃它们(我的偏好)。 sqlperformance.com/2012/10/t-sql-queries/sp_prefix 第二件事是您有一个前导通配符,它使您的查询变为非SARGable,并且没有多少索引会帮助提高性能。如果有可能避免使用前导通配符,您应该这样做。
-
另一个问题是TableA有多大,你如何尝试搜索,记住'%term%'不是SARG-able。
标签: sql sql-server stored-procedures sql-injection