gpt4 book ai didi

C# SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 12:23:22 25 4
gpt4 key购买 nike

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

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

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);

最佳答案

简短回答:您使用了正确的代码。存储过程可以防止注入(inject)攻击。仅当您在存储过程中使用 EXEC 时,例如:

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

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

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

关于C# SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100669/

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