gpt4 book ai didi

c# - 如何在插入记录时使用存储过程防止 SQL 注入(inject)?

转载 作者:太空狗 更新时间:2023-10-30 00:31:43 24 4
gpt4 key购买 nike

我是 SQL Server 的新手,我正在尝试使用如下所示的存储过程将记录插入到表中。

我想要一个使用以下存储过程的建议。还有:

  • 我可以防止 SQL 注入(inject)吗?
  • 这是正确的方法吗?

如果我在下面的过程中遗漏任何导致 SQL 注入(inject)的内容,请纠正我。

Create PROCEDURE [dbo].[spInsertParamTable]
@CmpyCode nvarchar(50),
@Code nvarchar(50),
@DisplayCode nvarchar(50),
@TotalDigit int,
@Nos bigint,
@IdentitY int OUTPUT
AS
BEGIN
INSERT tblParamTable (CmpyCode, Code, DisplayCode, TotalDigit, Nos)
VALUES (@CmpyCode, @Code, @DisplayCode, @TotalDigit, @Nos)
END

SELECT @Identity = SCOPE_IDENTITY();
RETURN @Identity

最佳答案

SQL 注入(inject)特指将 SQL 代码注入(inject)到现有的 SQL 查询中,该查询是通过字符串连接构建并动态执行的。它几乎总是以下形式:

@dynamicSQL = "select * from sensitivetable where field = " + @injectableParameter
sp_executesql @dynamicSQL

对于这个特定的存储过程,攻击者可能做的最坏的事情就是将无用的值插入到您的 tblParamTable 中。

但是,如果这些值随后在动态构建的查询中使用,那么这只会成为二阶攻击:在第 1 页插入值,在第 1 页查看动态查询的结果2.(我只提到这一点,因为你的表被命名为 tblParamTable,表明它可能包含供以后重用的参数。)

关于c# - 如何在插入记录时使用存储过程防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23410932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com