[英]How to prevent SQL injection using a stored procedure while insert record?
我是SQL Server的新手,我正在嘗試使用存儲過程將記錄插入表中,如下所示。
我想要一個使用以下存儲過程的建議。 也:
如果我錯過了下面的過程導致SQL注入,請糾正我。
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注入專門指將SQL代碼注入現有的SQL查詢,該查詢通過字符串連接構建並動態執行。 它幾乎總是以下形式:
@dynamicSQL = "select * from sensitivetable where field = " + @injectableParameter
sp_executesql @dynamicSQL
對於這個特定的存儲過程,攻擊者可以做的最糟糕的事情是將無用的值插入到tblParamTable中 。
但是 ,如果稍后在動態構建的查詢中使用這些值,那么這僅僅會成為二階攻擊:在第1頁上插入值,請參閱第2頁上的動態查詢結果。(我只提到這個,因為你的表被命名為tblParamTable,建議它可能包含以供以后重用的參數。)
我可以阻止SQL注入嗎?
你已經 - 因為你正在使用參數,所以沒有辦法將代碼“注入”你的SQL語句。
這是正確的方法嗎?
嗯,沒有一種“正確”的方式 - 但我沒有看到你正在做的事情有什么嚴重錯誤。 一些建議 :
RETURN
輸出參數值。 設置就足夠了。 BEGIN
/ END
塊之外的最后一個SELECT
,它不會傷害任何東西,但為了保持一致性,你應該把所有東西放在BEGIN
/ END
(或者完全不讓它們)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.