使用一个方法来运行类似的存储过程,并将StoredProcedure名称作为方法参数传递,这样安全吗



好吧,所以我完全理解使用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();
}
}
}

基本上,我有大量的方法来链接各种表组合中的行。在每一个Id中,"TableOne"有一个Id,"TableTwo"有一组Id。每个组合在数据库中都有一个相关的StoredProcedure,.NET代码极其重复。因此,我正在考虑使用上述方法,将所有StoredProcedure参数名称更新为相同(例如@Id而不是"@tableOneId"、"@tableTwoId"等),然后简单地将StoredProc程的名称传递给该方法并创建命令字符串,如下所示:

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

因此,我的问题是,这仍然安全吗,或者有更好的方法来处理/做这件事吗?

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

更改存储过程参数的名称不会增加或降低安全性。有人可能会认为,访问过你数据库的人可能会注意到这种模式,但精明的人会意识到,如果攻击者访问了你的数据库,那么你无论如何都会被搞砸。

如果您可以通过使参数名称通用来提高代码的可重用性,那么就去做吧,我说。它还半说明了这些存储过程执行相同的类型的函数,我希望我遇到的更多存储过程具有某种类型可以依赖的命名约定!

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

看起来您有多个具有相似工作的过程,但名称不同。将过程名称传递给C#方法应该不会有任何问题。

相关内容

最新更新