【发布时间】:2014-06-20 15:40:13
【问题描述】:
我有一个存储过程:
USE AdventureWorks2012;
GO
CREATE PROCEDURE HumanResources.uspGetEmployeesTest2
@LastName nvarchar(50),
@FirstName nvarchar(50)
AS
SET NOCOUNT ON;
SELECT
FirstName, LastName, Department
FROM
HumanResources.vEmployeeDepartmentHistory
WHERE
FirstName = @FirstName AND LastName = @LastName
AND EndDate IS NULL;
GO
如果我提供@LastName = '' OR '1' = '1' --''会导致SQL注入
我是 SQL 注入的新手。我需要一些关于如何保护它的建议
【问题讨论】:
-
不,它不会容易受到 SQL 注入的影响 - 它只会搜索那个姓氏的人(而且很可能找不到任何人)... 仅限 SQL 注入当您在自己的代码中将 SQL 语句和用户输入连接在一起时会发生
-
如果查询是“select *”,那么用户可以看到所有的信息(他不会被允许。他将被允许看到基于where子句的信息)。这不是安全下降吗??
-
对不起 - 我不明白你在问什么....这段代码中没有
SELECT *,并且@LAstName的值不会突然出现 @987654325 @ 要么...... -
好的,让我说清楚。如果有类似 SELECT * from ..... where FirstName = parameterOfFirtName AND LastName = parameterOfLastName ... 和 parameterOfFirtName 的值将是 '' OR '1' = '1' --'' 。在这种情况下,无论 where 子句如何,用户都可能看到所有信息。我在问我是否也应该意识到这一点。
-
不,只要您使用参数化查询(如您所做的那样),您就是安全的。没有 SQL 注入。只有当您自己从 SQL 片段和用户输入构建 SQL 语句并且您在不使用参数的情况下将其混合时,才会发生 SQL 注入
标签: stored-procedures sql-injection parameterized