gpt4 book ai didi

c# - 使用一种方法运行类似的存储过程是否安全,将 StoredProcedure 名称作为方法参数传递

转载 作者:行者123 更新时间:2023-12-02 04:35:51 26 4
gpt4 key购买 nike

好的,所以我完全理解使用 SqlParameters 的重要性,这个问题可能看起来有点愚蠢,但我对答案并不完全确定,并想确保我做出正确的决定。

考虑这个简单的 C# 方法:

public static void MakeLinks (int tableOneId, List<int> tableTwoIds, string storedProcedureName)
{
using (SqlConnection conn = new SqlConnection(<connection string>))
{
// Code Omitted

using (SqlCommand cmd = new SqlCommand(storedProcedureName, conn)
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;

// SqlParameterCollection code omitted

cmd.ExecuteNonQuery();
}
}
}

基本上,我有大量方法可以链接各种表格组合中的行。在每一个中,'TableOne' 都有一个 Id,'TableTwo' 有一个 Id 集合。每个组合在数据库中都有一个相关的 StoredProcedure,.NET 代码非常重复。因此,我正在考虑使用上述方法,将所有 StoredProcedure 参数名称更新为相同(例如,@Id 而不是“@tableOneId”、“@tableTwoId”等),然后简单地将 StoredProcedure 的名称传递给方法和像这样创建命令字符串:

string commandString = String.Format("[DatabaseName].[dbo].{0}", storedProcedureName);

因此,我的问题是,这仍然安全吗,或者是否有更好的方法来处理/执行此操作?

非常感谢您的想法和建议。

最佳答案

更改存储过程参数的名称会使它变得不安全或不安全。有人可能会争辩说,已经获得对您的数据库的访问权限的人可能会注意到这种模式 - 但随后精明的人会意识到,如果攻击者获得了对您的数据库的这种访问权限,那么您无论如何都会被搞砸。

如果您可以通过使参数名称通用化来使您的代码更易于重用 - 那么就去做吧,我说。它还半记录了这些存储过程执行相同种类的功能,我希望我不幸遇到的更多存储过程具有某种类型的命名可以依赖的约定!

关于c# - 使用一种方法运行类似的存储过程是否安全,将 StoredProcedure 名称作为方法参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996716/

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