我正在写在C#方法,它可以让客户机代码提供一种行ID,并取回来自行的数据构造的对象的选择查询。如果行ID是一个整数,我已确认这是积极的,有没有只是将其通过使用任何的String.format危害?我看不出如何,如果他们只被允许在一个int来传递,而不是一个字符串的任何损害可以这样做。

有帮助吗?

解决方案

您说得对,这将是安全的整数关口的方式。然而,也有故事的另一侧。

虽然它可以被认为是安全的,只是格式化一个int一个创建SQL表达式,也有一个性能考虑。当SQL服务器看到首次查询时,它会创建并缓存为查询的执行计划。相同的查询发出下一次,执行计划将被重用。

如果你在不同的字符串通过,它将被视为单独的查询,需要单独的执行计划。如果在相同的参数化查询每次通过(具有不同参数),所述第一执行计划将被重新使用SQL Server中。

即使你不关心的性能优势,我仍然会使用参数化查询对数据库的所有查询,甚至对于那些可以被认为是“安全”正如你所指出 - 仅仅是在一致方式应用访问数据。如果你的总是的使用参数化查询,还可以节省您确定查询是否是安全的,每次以便决定以何种方式来查询数据库的麻烦。

其他提示

你在这里回答你自己的问题。 System.Int32不能包含

';DROP DATABASE xxx;--

如果这就是你担心。即使传递负整数不会产生负面影响您的数据库!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top