担心Winforms项目中的SQL注入有什么意义吗?

担心Winforms项目中的SQL注入有什么意义吗?,winforms,sql-injection,Winforms,Sql Injection,在SO和其他地方,如果没有人礼貌地指出最好使用参数化输入和存储过程,那么在示例代码中发布长串接SQL指令几乎是不可能的 最近的例子 但是,在Winforms项目中担心SQL注入有意义吗 是的,因为你在其他项目上看到的所有原因 您的用户群可能较小,但也存在同样的危险。是否有理由不编写安全的数据库代码?我不这么认为 每个人都应该养成安全执行SQL的习惯,这样在编写公共应用程序时就不必考虑它了 还认为许多旨在私有的代码最终会在数月或数年后公开访问。例如,“嘿,这个用于库存报告的intranet应用程序

在SO和其他地方,如果没有人礼貌地指出最好使用参数化输入和存储过程,那么在示例代码中发布长串接SQL指令几乎是不可能的

最近的例子


但是,在Winforms项目中担心SQL注入有意义吗

是的,因为你在其他项目上看到的所有原因

您的用户群可能较小,但也存在同样的危险。

是否有理由不编写安全的数据库代码?我不这么认为

每个人都应该养成安全执行SQL的习惯,这样在编写公共应用程序时就不必考虑它了

还认为许多旨在私有的代码最终会在数月或数年后公开访问。例如,“嘿,这个用于库存报告的intranet应用程序很有用,为什么我们不将其上传到我们的公共网站供我们的业务合作伙伴使用?”

  • 使用参数从SQL查询中分离未验证的数据
  • 您可以在SQL查询中插入经过验证的数据。也就是说,如果您有代码来测试一个变量只能是整数(例如),那么可以安全地将其视为整数
  • 对于查询的其他动态部分(表名、列名、表达式等),不能使用查询参数。但您可以将用户输入映射到硬编码字符串。例如,如果用户输入
    1
    ,则按
    日期
    列排序。如果用户输入
    2
    ,则按
    status
    列排序
  • 忽略那些说“只使用存储过程!”的程序员,就好像这与防范SQL注入有关。没有

真实生活中的传奇故事:中西部公司的大老板前来查看项目进展情况。不知道这是怎么发生的,但不知怎的,一批新的订单从调度室传来,给了一位以前从未见过的客户。大约在老板来看的时候投入生产。他姓奥肖内西


使用参数化输入不仅仅是为了避免SQL注入。

+1;如果你不关心SQL注入,即使是在桌面应用程序中,很快或以后,“你所有的_数据库都属于我们”我礼貌地同意这个答案owner=)这不是因为用户群更小,而是因为用户群——通常——与数据库有着完全不同的关系。通常,它是在各种意义上的“他们的”数据库。他们不想搞砸它。事实上,他们拥有它。他们也拥有备份过程吗?SQL注入不一定是恶意的,它可能是一个诚实的事故,碰巧利用了应用程序对输入的松散处理。我认为这符合SQL注入的定义,虽然这是偶然的,而不是恶意的。我想我的问题应该区分恶意和意外。当然,winforms应用程序必须防范后者。有一些方法可以保护winforms应用程序免受“O'Shaughnessy”错误的影响,理论上,这仍然会使它容易受到其他类型的攻击