C#SQL注入

我正在使用连接到SQL Server数据库的C#应用​​程序.我听说过数据的安全性,所以我决定在SQL Server中使用存储过程.

我的问题是在我在SQL Server中创建存储过程后,我的C#代码是否受到保护以防止SQL注入?我使用了正确的代码吗?

SqlConnection con = new SqlConnection("Server = localhost;Database = test; Integrated Security = true");

SqlDataAdapter da = new SqlDataAdapter("selectdhena", con); // Using a Store Procedure.
da.SelectCommand.CommandType = CommandType.StoredProcedure; 

DataTable dt = new DataTable("dtLista");
da.SelectCommand.Parameters.AddWithValue("@full_name", txt.Text); 

dtg.ItemsSource = dt.DefaultView;
da.Fill(dt);  

最佳答案 简短的回答:你使用正确的代码.存储过程受到保护免受注入攻击.仅当您在存储过程中使用EXEC时,例如:

CREATE PROCEDURE dbo.CreateUserTable
    @data systemData
AS
    EXEC('CREATE TABLE ' + @data + ' (column1 varchar(100), column2 varchar(100))');
GO

攻击者可以向应用程序注入一些设置数据的代码

a(c1 int); SHUTDOWN WITH NOWAIT;-- 

这将阻止SQL Server.所以在你的存储过程中更好地拥有一些检查逻辑:

CREATE PROCEDURE dbo.AlterUserTable
    @data systemData
AS
    IF EXISTS(SELECT * 
              FROM INFORMATION_SCHEMA.TABLES
              WHERE TABLE_SCHEMA = 'dbo'
                AND TABLE_TYPE = 'BASE TABLE'
                AND TABLE_NAME = @data)
BEGIN
    // The table is known to exist
    // construct the appropriate command here
END
GO
点赞