【发布时间】:2019-08-16 01:08:52
【问题描述】:
我有许多只在服务器端运行的 Windows 服务。它对数据库(MySQL)执行很少的 CRUD 操作。
有一个客户端应用程序允许用户通过它上传文件到服务器。当文件上传到服务器时,Window Service 会对该文件执行必要的操作,并通过 SQL 查询更新数据库中的详细信息。
Client App(Desktop App) -> File -> Upload on Server -> Window Service Process File -> Database Entry
我想知道这种架构是否真的需要 参数化查询以防止 SQL 注入?
【问题讨论】:
-
您的问题的答案是“是”,提到的任何其他点都是完全不相关的——没有理由不正确和安全地做事。
-
如果服务中的数据库代码不对用户数据进行参数化,那么格式错误或恶意的用户数据可能会导致 SQL 注入,因此需要进行参数化。为什么您认为情况可能并非如此?
-
考虑使用参数化查询,不仅可以保护sql注入,还可以让数据库引擎优化其查询计划。无论如何,要回答我们需要知道您在服务上执行了什么样的操作。
-
@AlexK。我的项目中有许多非参数化查询。在新的安全标准中,我需要将它们全部参数化。我想到了这一点,因为通常 Web 应用程序对 SQL 注入更开放。在我的情况下,数据库操作不是由客户端应用程序直接发生的。因此我很困惑。
-
@ArpitGupta:您必须记住,如果其他一些系统将“危险值”(如 ... Drop table ...)存储到数据库中,因为它使用参数化查询和您的服务读取该值并使用它来创建查询,然后您的服务执行 sql 注入。
标签: c# windows-services sql-injection parameterized-query