SQL 在 SQL 服务器 2012 上注入
SQL Injection on SQL Server 2012
Whosebug 对我的问题总是有正确的答案,因此在我的编码生涯中帮了我大忙。然而,这个问题可能有点具体,希望它不会得到严厉的回应,因为这是我第一次在网站上发帖。
我有兴趣创建一个 SQL Server 2012 存储过程,允许用户搜索各种列。我相信我已经创建了一个存储过程来执行我期望的操作,但我担心 SQL 注入尝试。我是否考虑了 SQL 注入来涵盖所有可用的基础?如果没有,请教我如何规避我的示例存储过程。请注意:注意到的那个已经被修改以保护公司的数据结构。
存储过程:
CREATE PROCEDURE [dbo].[spSearch]
(
@searchTerm varchar(50) = NULL
)
AS
set @searchTerm = LTRIM(RTRIM(@searchTerm));
select a.ID
,a.Col1
,a.Col2
,a.Col3
,a.Col4
,a.Col5
,b.Col1
from table1 a
left join table2 b on a.ID = b.ID
where (a.Col1 like '%' + @searchTerm + '%'
or a.Col2 like '%' + @searchTerm + '%'
or a.Col3 like '%' + @searchTerm + '%'
or a.Col4 like '%' + @searchTerm + '%'
or b.Col1 like '%' + @searchTerm + '%'
or b.Col2 like '%' + @searchTerm + '%'
or b.Col3 like '%' + @searchTerm + '%'
or b.Col4 like '%' + @searchTerm + '%'
or b.Col5 like '%' + @searchTerm + '%'
or b.Col6 like '%' + @searchTerm + '%')
GO
我主要担心的是将恶意 SQL 命令传递到 50 个字符的 varchar 参数并让它在各种 where like 子句中的任何一个中执行的可能性。
这实际上取决于您如何从代码中调用 SP。存储过程自身不安全,无法进行 sql 注入。当您使用参数化函数时,您可能没问题。当您将 sql 查询作为字符串发送时,您仍然会遇到 sql 注入问题。主要问题是代码中的字符串连接。如果您的参数来自不受信任的来源,则字符串连接永远不会安全。 Do Stored Procedures Protect Against SQL Injection?
基本课程是编写没有任何字符串连接的存储过程。
Whosebug 对我的问题总是有正确的答案,因此在我的编码生涯中帮了我大忙。然而,这个问题可能有点具体,希望它不会得到严厉的回应,因为这是我第一次在网站上发帖。
我有兴趣创建一个 SQL Server 2012 存储过程,允许用户搜索各种列。我相信我已经创建了一个存储过程来执行我期望的操作,但我担心 SQL 注入尝试。我是否考虑了 SQL 注入来涵盖所有可用的基础?如果没有,请教我如何规避我的示例存储过程。请注意:注意到的那个已经被修改以保护公司的数据结构。
存储过程:
CREATE PROCEDURE [dbo].[spSearch]
(
@searchTerm varchar(50) = NULL
)
AS
set @searchTerm = LTRIM(RTRIM(@searchTerm));
select a.ID
,a.Col1
,a.Col2
,a.Col3
,a.Col4
,a.Col5
,b.Col1
from table1 a
left join table2 b on a.ID = b.ID
where (a.Col1 like '%' + @searchTerm + '%'
or a.Col2 like '%' + @searchTerm + '%'
or a.Col3 like '%' + @searchTerm + '%'
or a.Col4 like '%' + @searchTerm + '%'
or b.Col1 like '%' + @searchTerm + '%'
or b.Col2 like '%' + @searchTerm + '%'
or b.Col3 like '%' + @searchTerm + '%'
or b.Col4 like '%' + @searchTerm + '%'
or b.Col5 like '%' + @searchTerm + '%'
or b.Col6 like '%' + @searchTerm + '%')
GO
我主要担心的是将恶意 SQL 命令传递到 50 个字符的 varchar 参数并让它在各种 where like 子句中的任何一个中执行的可能性。
这实际上取决于您如何从代码中调用 SP。存储过程自身不安全,无法进行 sql 注入。当您使用参数化函数时,您可能没问题。当您将 sql 查询作为字符串发送时,您仍然会遇到 sql 注入问题。主要问题是代码中的字符串连接。如果您的参数来自不受信任的来源,则字符串连接永远不会安全。 Do Stored Procedures Protect Against SQL Injection?
基本课程是编写没有任何字符串连接的存储过程。