SQL注入:不是替换("'","''")足够好吗?

Mr *_*ter 11 t-sql sql-server

虽然我当然可以看到使用参数进行SQL查询的优势,特别是在处理日期时间等事情时,我仍然不确定参数是防止SQL注入的唯一方法.
事实是,我继承了一个应用程序,它有类似的东西

"SELECT Field FROM Table WHERE Filter='"+userinput.Replace("'", "''")+"'"
Run Code Online (Sandbox Code Playgroud)

到处都是.现在虽然那些看起来不太令我愉快,但我不介意重写它们,我的问题是,我需要吗?尽我所能,我看不到用这种方式执行SQL注入的方法.

Dav*_*vid 16

不,这还不够.如果您的平台和/或RDBMS支持这两种功能,那么它将在紧要关头,但它是一个非常弱的替代方案,并且使用参数化查询或参数化存储过程会更好.

OWASP的SQL注入预防备忘单

...与使用参数化查询相比,这种方法很脆弱.只有谨慎使用此技术才能以经济有效的方式改进遗留代码.

还有更多

SQL注入 - 但为什么逃脱报价不再安全?

Sql注入神话和谬误

删除所有单引号和短划线字符后的SQL注入

  • 请给出一些简单的原因/示例,说明为什么它不够好而不是提供替代建议. (6认同)
  • 实际上,如果您知道您的数据库并且您的代码只会与该数据库系统通信,并且仅在需要写入数据库时​​才进行转义,那么它就可以正常工作,并且不需要其他字符串操作来消除 SQL 注入。使用准备好的语句是一种很好的做法,以便您的代码可以跨不同的数据库系统工作。 (2认同)