【问题标题】:Standard Function for Escaping Strings in SQLSQL中转义字符串的标准函数
【发布时间】:2009-04-23 12:42:37
【问题描述】:

我正在用 .NET2.0 编写一个程序,我需要在使用它们之前对输入进行转义。不幸的是,标准参数方法系统在我使用的系统中不能完全工作。使用 ODBCCommand 类我不能放置一个?语句的选择部分中的参数(这是我正在做的一点点技巧所必需的)而不会出错,因此我需要手动转义可能包含或不包含单引号(')的字符串。有什么建议吗?

编辑 - 示例 SQL:

如我所愿:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B)
SELECT (?, COLUMN_C)
FROM TABLE_B
WHERE COLUMN_D = ?

原样:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B)
SELECT ('INPUT_VALUE_HERE', COLUMN_C)
FROM TABLE_B
WHERE COLUMN_D = ?

编辑:Sybase ASE 是 DB 驱动程序,通过 ODBC

【问题讨论】:

  • 你能举一个你试图执行的 SELECT 的例子吗?
  • 如果这是列名或表名等,请不要忘记攻击者不需要单引号来进行注入。除此以外 ?应该可以工作,不是吗?
  • 另外你用的是什么数据库?并非所有数据库都有相同的转义字符集,根据您在 SELECT 语句中的位置,您可能需要不同的转义字符。
  • 提供的示例应该使用参数。什么是数据库,错误是什么?

标签: sql .net-2.0 escaping


【解决方案1】:
Dim s As String = "Michael O'Flatley"
Dim escapedString as String = s.Replace("'", "''")

【讨论】:

  • 我不能代表 Sybase ASE,但在 SQL Server 和 Oracle 中,如果它是 like 子句的一部分,您只需要转义 %(和 _)
【解决方案2】:

你可以用这个扩展函数解析你的字符串参数

public static string SqlEncode(string str)
{
    if (str == null) return String.Empty;
    return str.Replace("'","''");
}

【讨论】:

  • 做扩展函数应该是public static string SqlEncode(this string str)?
  • 好主意,但如果你看你会看到这个 .NET2.0(没有扩展方法)。
  • 我没有做扩展,因为他说的是.NET 2.0。
  • 对不起,Soni,你是对的,我在你的回答中读到了扩展,并认为你打算写一个扩展方法
猜你喜欢
  • 2012-08-06
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2016-03-07
  • 1970-01-01
相关资源
最近更新 更多