首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SqlServer的C#中转义简单的SQL查询

如何在SqlServer的C#中转义简单的SQL查询
EN

Stack Overflow用户
提问于 2010-03-09 02:25:17
回答 6查看 72.5K关注 0票数 85

我使用的API需要SQL字符串。我接受用户输入,对其进行转义并将其传递给API。用户输入非常简单。它要求提供列值。如下所示:

string name = userInput.Value;

然后,我构造一个SQL查询:

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           name.replace("'", "''"));

这足够安全了吗?如果不是,有没有一个简单的库函数来保证列值的安全:

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           SqlSafeColumnValue(name));

该接口使用SQLServer作为数据库。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-09 02:33:03

由于不能使用SqlParameter,因此只需将字符串中的'‘替换为’‘(即两个单引号,而不是一个双引号)。就这样。

致潜在的反对者:重读问题的第一行。“使用参数”也是我的直觉反应。

编辑:是的,我知道SQL注入攻击。如果您认为此报价易受这些因素的影响,请提供一个有效的反例。我不这么认为。

票数 154
EN

Stack Overflow用户

发布于 2014-06-06 14:21:39

我使用动态sql (我可以听到行刑队在装步枪)来实现搜索功能,但每当用户搜索像“O‘’Reilly”这样的姓氏的人时,它就会崩溃。

我设法想出了一个变通办法(读作"hack"):

在sql中创建了一个标量值函数,将单引号替换为两个单引号,有效地转义了有问题的单引号,因此

 "...Surname LIKE '%O'Reilly%' AND..." becomes     "...Surname LIKE '%O''Reilly%' AND..."

每当我怀疑字段可能包含单引号字符时,就会从sql中调用此函数。

CREATE FUNCTION [dbo].[fnEscapeSingleQuote]
    (@StringToCheck NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @Result NVARCHAR(MAX)
    SELECT @Result = REPLACE(@StringToCheck, CHAR(39), CHAR(39) + CHAR(39))
    RETURN @Result
END

不是很优雅,也不是很有效率,但当你手头拮据时,它是有效的。

票数 0
EN

Stack Overflow用户

发布于 2014-12-17 12:18:23

当需要在短时间内以最小的破坏风险和最少的测试来解决大量即席sql中的问题时,人们可能希望将‘替换为’,而不是参数化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2403681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档