c# - 何时担心 SQL 注入(inject)保护

标签 c# sql

小背景:我是这家公司唯一的程序员。我正在使用预先存在的框架。

也就是说,公司有一个 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/

相关文章:

c# - 带有 ProgressBar 的 BackgroundWorker - 跨线程操作无效

PHP:使用 LIKE 选择器时防止 SQL 注入(inject)

sql - 根据 SQL-SERVER 中的空间交集更新行

sql - 当列数据类型是复合类型时,如何使用 PostgreSQL 传输数组中的列?

c# - 如何覆盖 ToString() 并实现泛型?

c# - 没有被捕获的异常

c# - 什么时候结构是答案?

c# - 如何使用 CSV 文件中的数据运行 XUnit 测试

php - MySQL OUTER JOIN 从连接表中获取单独的行结果

mysql - 将变量设置为等于精确的列和行