小背景:我是这家公司唯一的程序员。我正在使用预先存在的框架。
也就是说,公司有一个 dll(Database.dll),其中包含“我需要的所有数据库交互”。比如,它有一个 Query()
、Update()
、Insert()
等。现在,我正在编写的项目集对 Database.dll 的引用。我的项目接受零用户输入。最接近用户输入的是一个下拉框,用户可以从中选择日期。没有太多经验,我很好奇我是否还需要担心 SQL 注入(inject)?如果是这样,查询会像这样写吗
var query = string.Format("SELECT timestamp FROM table1 WHERE date = \"{0}\"
AND measured_dist = bit_loc AND rop > 0" , Date))
作为参数化查询是否足够?请记住,所有查询执行都由预先存在的 Query()
处理,我被告知必须使用它,并且不能编辑它。
编辑
这个程序是一个 WinForm 应用程序。
最佳答案
如评论中所述,答案是“始终”。因为向其添加参数并正确地执行它会如此容易,而不是连接:第一次就正确地执行。另外:您是否考虑过注入(inject)不是您显示的代码中的唯一问题?该代码也容易受到本地化/国际化的影响。如果用户的 PC 配置为不同的文化,会发生什么情况?日期和数字将以不同方式呈现 - 并且经常会中断。参数不会发生这种情况。另外:名称通常在 :) 中带有撇号
关于c# - 何时担心 SQL 注入(inject)保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367771/