我有一个项目,其中包含大量编译在 *.DLL 文件中的 SQL 查询。
昨天,我收到了一个新错误:带有单引号的用户名(自动生成)会导致错误。
原因是这样的查询:
string.Format("SELECT TimeZone from yaf_User WHERE [Name]='{0}'", UserName);
有人可以建议任何类型的技巧或技巧来修复它吗?
更新:我不知道为什么开发人员使用这种可怕的方式来生成 SQL 查询,但现在我应该修复它。客户不会理解为什么我要重写很多代码来修复。
最佳答案
您正在做的事情很危险,因为它会导致 SQL 注入(inject)攻击(作为副作用,它也会导致您所看到的问题。
解决方案是使用参数化查询——这也避免了 SQL 注入(inject)攻击。
SqlCommand cmd = new SqlCommand("SELECT TimeZone from yaf_User WHERE [Name]=@UserName"), conn);
cmd.Parameters.Add(new SqlParameter("Username", theUsername));
您唯一的选择是转义单引号。然而,这是对您的代码的修复,但您的解决方案仍然不安全。 我无法强调您解决此问题的重要性 - 就目前而言,我可以通过使用恶意用户名登录来清除您系统中的整个数据表。
关于sql - MSSQL : single quotes causes to error in queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237358/