我正在维护一段连接SQL查询的代码,如:
string sql = "SELECT* FROM table WHERE column = '" + value + "'";
现在结果表明,如果值包含',则会破坏SQL Server文本语句。我搜索了类似于PHP addslashes的方法,但没有成功。有 Regex.Escape ,但它没有做到这一点。有没有其他方法可以解决这个问题,除了在字符串上调用替换方法?:
string sql = "SELECT* FROM table WHERE column = '" + value.Replace("'", "''") + "'";
谢谢, 帕维尔
答案 0 :(得分:8)
您应该使用SqlCommand和SqlParameter,而不是像现在一样构建查询。 正如其他人所说,你正在做的事情让你对注射攻击敞开大门。
如果你不能这样做那么就像你说的那样,替换是一个很好的选择。
答案 1 :(得分:3)
您正在打开SQL Injection攻击的代码 - 改为使用参数化查询。
作为奖励,将不再需要这些逃脱的诡计,因为图书馆将为您照顾它们。
答案 2 :(得分:3)
我建议不要使用字符串连接,你应该使用参数而不是看下面的例子
// 1. declare command object with parameter
SqlCommand cmd = new SqlCommand(
"select * from Customers where city = @City", conn);
// 2. define parameters used in command object
SqlParameter param = new SqlParameter();
param.ParameterName = "@City";
param.Value = inputCity;
// 3. add new parameter to command object
cmd.Parameters.Add(param);
答案 3 :(得分:1)
这是一般推荐SQL参数的关键原因。如果那不是一个选项,我认为String.Replace()
和其他方法一样好。