![](/img/trans.png)
[英]What are all the characters that should be escaped from a string to avoid SQL injection attacks in SQL Server?
[英]What are the characters that need to be escaped in Oracle SQL to avoid SQL Injection?
只想确认在Oracle SQL中需要转义哪些字符以避免SQL注入? 到目前为止,我只发现这篇文章似乎可以回答我的问题: https : //ss64.com/ora/syntax-escape.html 。 然而,正如我一声,双耳罐“@”字符也需要转义,因此,我认为上面的文章有需要转义字符不完整的清单。 如果有人可以指出需要转义的Oracle SQL中字符的完整列表,那么将不胜感激。
[TL; DR]不要尝试通过转义字符来防止SQL注入; 相反,请勿使用动态SQL或通过字符串串联生成查询,而应使用正确参数化的查询。
链接的页面不是要转义动态SQL,而是要处理在文字中具有特殊含义的字符(在某些情况下,仅适用于用户界面的子集)。
如果您有字符串文字,那么可以通过在字符串周围使用单引号'
定义,如果要在字符串文字中使用单引号,则需要使用第二个单引号对单引号进行转义。
SELECT 'The woman''s hat blew off in the wind.' FROM DUAL
在SQL * Plus用户界面中,可以设置LIKE
查询中使用的转义字符,以便可以匹配%
或_
字符,否则这些字符在文字中将被视为通配符:
SET ESCAPE '\';
WITH data ( value ) AS (
SELECT 'abc%def' FROM DUAL UNION ALL
SELECT 'abcdef' FROM DUAL
)
SELECT * FROM data WHERE value LIKE '%\%%';
但是,您可以在查询中指定相同的内容(在所有用户界面中有效,而不仅限于SQL * Plus):
WITH data ( value ) AS (
SELECT 'abc%def' FROM DUAL UNION ALL
SELECT 'abcdef' FROM DUAL
)
SELECT * FROM data WHERE value LIKE '%\%%' ESCAPE '\';
他们提到的第三件事是&
,用于替换变量。 许多用户界面不支持替换变量,因此这仅是那些有限的用户界面所关心的。
这是有效的SQL语句:
SELECT 'A&B' FROM DUAL
但是,在SQL * Plus中,“& &
表示替换变量的开始,而要忽略它,您需要执行以下任一操作:重新定义替换变量的开始字符; 逃脱那个角色; 或关闭扫描替代变量。
为了避免SQL注入,Oracle SQL中需要转义哪些字符?
所有字符在SQL中均有效。 SELECT '&@()''"%' FROM DUAL
是有效的语句。它是否会导致SQL注入问题取决于它们发生的位置。
但是,正如我所听到的,“&”字符也需要转义
仅当用户界面支持替换变量时才将&
字符转义,然后仅在您希望防止将其用作替换变量时才需转义。 在其他SQL用户界面中,它没有特殊含义。
@
字符不需要在SQL中转义。
一般来说:
DBMS_ASSERT
验证那些对象标识符(并将所有其他值作为绑定变量传递)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.