0

当用户在用 C# (.NET) 开发的表单条目中输入诸如“Sam 的项目可交付成果”之类的输入文本时,我想转义单引号。数据库是ORACLE 10g。

我遇到了 ORACLE 10g http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_escape_special_characters_when_writing_SQL_queries.3F提供的引号分隔符功能,但我不确定是否使用这样的引号分隔符q'[ some text with single quote]'作为一部分一个 SELECT 语句会阻止 SQL 注入攻击吗?

引号分隔符 q'[ 带单引号的文本 ]' 的示例用法:

SQL> SELECT q'[Frank's Oracle site]' AS text FROM DUAL;
 TEXT
 -------------------
 Frank's Oracle site

 SQL> SELECT q'[A 'quoted' word.]' AS text FROM DUAL;
 TEXT
 ----------------
 A 'quoted' word.

 SQL> SELECT q'[A ''double quoted'' word.]' AS text FROM DUAL;
 TEXT
 -------------------------
 A ''double quoted'' word.
4

2 回答 2

5

如果您的查询看起来像这样......

query = "SELECT * FROM Users WHERE name = q'[" + <what the user entered> + "]'";

...并且用户输入了这样的内容...

abc]';<harmful statement>;SELECT * FROM DUAL WHERE '1'=q'[1

...他们将成功注射。

与您一起使用的分隔符无关紧要q- 坚定的攻击者会尝试所有分隔符。准备好的陈述是你最好的辩护。

于 2013-04-23T16:15:09.653 回答
0

在执行 SQL 之前,尝试用 2 个单引号替换所有单引号。即在执行SQL命令之前将'替换为''。

在 C# 中:

string sql = originalString.Replace("'", "''");
于 2013-04-23T15:52:18.320 回答