MSSQL:单引号导致查询错误

Ego*_*nko 2 .net sql sql-server


我有一个项目,其中包含许多用*.DLLs文件编译的SQL查询.
昨天,我收到了一个新的错误:用单引号自动生成的用户名会导致错误.
原因是像这样的查询:

    string.Format("SELECT TimeZone from yaf_User WHERE [Name]='{0}'", UserName);
Run Code Online (Sandbox Code Playgroud)


有人可以建议任何类型的技巧或黑客来解决它?

更新:我不知道为什么开发人员使用这种可怕的方式来生成SQL查询,但是现在我应该修复它.客户端不明白我为什么要重写大量修复代码.

Lia*_*ath 7

你正在做的是危险的,因为它适用于SQL注入攻击(作为副作用,它也会引起你所看到的问题.

解决方案是使用参数化查询 - 这也避免了SQL注入攻击.

SqlCommand cmd = new SqlCommand("SELECT TimeZone from yaf_User WHERE [Name]=@UserName"), conn);
cmd.Parameters.Add(new SqlParameter("Username", theUsername));
Run Code Online (Sandbox Code Playgroud)

你唯一的选择是逃避单引号.但是,这是对您的代码的修复,但您的解决方案仍然不安全.我无法强调你解决这个问题的重要性 - 因为它可以通过使用恶意用户名登录来消灭系统中的整个数据表.