gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:32:50 25 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/

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