gpt4 book ai didi

c# - SQL CLR 存储过程是否可以防止注入(inject)?

转载 作者:行者123 更新时间:2023-11-30 15:34:25 26 4
gpt4 key购买 nike

我用 C# 编写了一个 CLR 存储过程,如下所示

[Microsoft.SqlServer.Server.SqlProcedure]
public static void IsUserNameExists(string strUserName, out SqlBoolean returnValue)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand("Select count(UserName) from [User] where UserName='" + strUserName + "'", connection);

int nHowMany = int.Parse(command.ExecuteScalar().ToString());

if (nHowMany > 0)
returnValue = true;
else
returnValue = false;
}
}

它是否容易受到 SQL 注入(inject)攻击?我正在使用 SqlParameter。有什么最佳做法吗?

最佳答案

防止sql注入(inject)唯一正确的方法应该是使用参数化查询。你正在做的事情是不安全的,因为你是在连接字符串。

在这里查看以供引用 How do parameterized queries help against SQL injection?

澄清一下,为什么你的代码容易受到攻击:
SQLParameter 方面甚至像 '); DROP TABLE YourTable;-- 将是一个有效的输入(因为它是一个字符串)。然后您将使用它来创建内部查询,这就是您的 SQL 注入(inject)。

关于c# - SQL CLR 存储过程是否可以防止注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139879/

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