当前位置: 首页 > 知识库问答 >
问题:

在OracleSQL中需要转义哪些字符才能避免SQL注入?

云航
2023-03-14

只想确认Oracle SQL中需要转义哪些字符才能避免SQL注入?到目前为止,我只发现这篇文章似乎回答了我的问题:https://ss64.com/ora/syntax-escape.html.然而,正如我所听说的,amphora“@”字符也需要转义,因此,我认为上面的文章中有不完整的需要转义的字符列表。如果有人能告诉我Oracle SQL中需要转义的字符的完整列表,我将不胜感激。

共有1个答案

浦泳
2023-03-14

[太长别读]不要试图通过转义字符来阻止SQL注入;相反,不要使用动态SQL或通过字符串连接生成查询,而是使用正确的参数化查询。

该链接页面不是关于转义动态SQL的,而是关于处理在文本中具有特殊含义的字符(在某些情况下,它仅用于用户界面的子集)。

如果您有一个字符串文字,那么这是由字符串周围的单引号'定义的,如果您想在字符串文字中使用单引号,那么您需要通过使用第二个单引号来转义单引号。

SELECT 'The woman''s hat blew off in the wind.' FROM DUAL

在SQL*Plus用户界面中,您可以设置查询中使用的转义字符,以便匹配在文本中被视为通配符的字符:

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*中加上符号

为了避免SQL注入,Oracle SQL中需要转义哪些字符?

所有字符在SQL中都有效<代码>选择'

然而,正如我所听说的,符号“@”字符也需要转义

符号<代码>

在SQL中,at@字符不需要转义。

一般情况下:

  • 不要试图转义字符以阻止SQL注入
  • 不要通过串联字符串生成查询
  • 使用参数化查询并将值作为绑定变量传递给它们
  • 如果必须动态提供架构/表/列名,则使用DBMS\u ASSERT验证这些对象标识符(并将所有其他值作为绑定变量传递)
 类似资料:
  • 问题内容: 它们是否与XML相同,也许还要加上空格()? 我发现的HTML转义字符一些大名单,但我不认为他们 必须 进行转义。我想知道 需要 逃避什么。 问题答案: 如果你在文本内容预期的位置在文档中插入文本内容1,你通常只需要,你会在XML逃脱相同的字符。在元素内部,这仅包括实体转义与号和元素定界符小于和大于符号 : 在属性值内部,还必须转义使用的引号字符: 在某些情况下,跳过这些字符中的某些字

  • 在Bash中是否有需要转义的字符的全面列表?是否可以只使用检查它? 并且工作正常,没有转义。是否意味着不需要转义?这是检查必要性的好方法吗? 更一般的是:在和中转义的字符是否相同?

  • 问题内容: 我正在使用MySQL API的功能 根据文档,它转义以下字符: 现在,我查看了OWASP.org的ESAPI安全库,并在Python端口中包含以下代码(http://code.google.com/p/owasp- esapi-python/source/browse/esapi/codecs/mysql。 py ): 现在,我想知道是否真的需要转义所有这些字符。我知道为什么%和_在那

  • 什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。 而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的

  • 问题内容: 我是JavaEE的新手,并试图通过检查数据库来学习制作一个简单的登录页面。这是代码示例: 它应该容易受到SQL注入的侵害吧?我可以通过在ASP.NET中使用参数化查询来做到这一点,如下所示: 有没有办法像这样在Java中使用参数化查询?谁能以参数化形式使用该查询来避免SQL注入? 谢谢 问题答案: 是的,你可以做到这一点;例如:

  • 我有一个输入json字符串,其中包含几个已经转义的特殊字符和一些未转义的特殊字符(如en-dash/em-dash)。解析此json字符串(需要解析此字符串以检索对象数组)后,它将具有特殊字符的字符串转换为Unicode值(例如,将短划线字符转换为2013)。我的要求是不要转义任何特殊字符,并保持其他已转义字符不变。简单来说,在解析JSON字符串后,内容不应更改。 请建议一些方法来处理这个问题。