sql - MSSQL : single quotes causes to error in queries

标签 sql .net sql-server


我有一个项目,其中包含大量编译在 *.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/

相关文章:

sql - SQL存储过程中将用户输入附加到表并防止sql注入(inject)的正确方法

sql-server - 我是否需要在 SQL Server 过程中使用 try..catch block 和显式回滚?

c# - 为什么面板在移除它及其子面板时会闪烁?

mysql - 将数据从 SQL Server 2008 R2 传输到 MySQL

sql - 用于Nullable <T>的LINQ-to-SQL IN/Contains()

sql - 处理使用 SUM 的 SQL 查询中的 NULL 值

.net - 什么是 ".Net Identity"?

c# - 用于创建一组数据对象的设计模式

.net - 使用不同算法的 UUID 冲突风险

SQL Server TDE 和跨订阅恢复