我正在使用连接到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