【发布时间】:2013-04-23 15:48:53
【问题描述】:
当用户在用 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.
【问题讨论】:
-
你的问题是......?
-
@MarcB:抱歉,Marc 在发布问题时遇到了一些问题。现在我的帖子应该解释我的问题/疑问
-
它不会阻止注射。它可能会减慢半心半意的尝试,因为攻击者会假设结束分隔符是
'并且无处可去。但是专业人士不会止步于此,他们可以很容易地破坏引用文字。 -
否 - 这不会阻止注入攻击。唯一可以防止注入攻击的是永远不要在 SQL 文本中直接使用用户输入的数据构建动态 SQL 语句;即始终通过参数标记访问用户输入的数据。万能!!!