CWE公司

常见缺陷列表

社区开发的可能成为漏洞的软件和硬件弱点列表

CWE新手?单击此处!
CWE最重要的硬件弱点
CWE前25个最危险的弱点
主页>CWE列表> CWE-单个字典定义(4.14)
身份证件

CWE-89:SQL命令中使用的特殊元素的不当中和(“SQL注入”)

弱点ID:89
漏洞映射:允许此CWE ID可用于映射到实际漏洞
摘要:底座基础-一个主要独立于资源或技术的弱点,但有足够的细节来提供检测和预防的具体方法。基本层面的弱点通常从以下两个或三个维度来描述问题:行为、财产、技术、语言和资源。
查看自定义信息:
对于那些对弱点的更多概念方面感兴趣的用户。例如:教育工作者、技术作家和项目/计划经理。 适用于关心实际应用程序的用户,以及有关弱点性质和如何防止其发生的详细信息。例如:工具开发人员、安全研究人员、笔试人员、事件响应分析人员。 对于将问题映射到CWE/CAPEC ID的用户,即为特定问题找到最合适的CWE(例如CVE记录)。例如:工具开发人员、安全研究人员。 对于希望查看CWE/CAPEC条目的所有可用信息的用户。 对于想要自定义显示的详细信息的用户。
×

编辑自定义筛选器


+ 描述
该产品使用来自上游组件的外部影响输入构造SQL命令的全部或部分,但不会中和或错误地中和特殊元素,这些元素在发送到下游组件时可能会修改预期的SQL命令。
+ 扩展描述

如果在用户可控制的输入中没有足够的删除或引用SQL语法,生成的SQL查询可能会导致这些输入被解释为SQL,而不是普通的用户数据。这可用于更改查询逻辑以绕过安全检查,或插入修改后端数据库的附加语句,可能包括执行系统命令。

SQL注入已成为数据库驱动网站的常见问题。该漏洞很容易被检测到,也很容易被利用,因此,任何用户基数最小的网站或产品包都可能受到此类攻击。此缺陷取决于SQL没有真正区分控制平面和数据平面这一事实。

+ 关系
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与“研究概念”(CWE-1000)视图相关
自然类型身份证件姓名
子对象等级类-一个以非常抽象的方式描述的弱点,通常独立于任何特定的语言或技术。比支柱弱点更具体,但比基础弱点更普遍。类级别的弱点通常从以下维度中的1个或2个方面描述问题:行为、属性和资源。943数据查询逻辑中特殊元素的不当中和
父对象变体变体-弱点它与特定类型的产品相关,通常涉及特定的语言或技术。比基本弱点更具体。变量级别的弱点通常从以下3到5个维度描述问题:行为、属性、技术、语言和资源。564SQL注入:休眠
CanFollow公司变体变体-弱点它与特定类型的产品相关,通常涉及特定的语言或技术。比基本弱点更具体。变量级别的弱点通常从以下3到5个维度描述问题:行为、属性、技术、语言和资源。456缺少变量初始化
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与“软件开发”视图相关(CWE-699)
自然类型身份证件姓名
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。137数据中立问题
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与“已发布漏洞简化映射的弱点”(CWE-1003)视图相关
自然类型身份证件姓名
子对象等级类-一个以非常抽象的方式描述的弱点,通常独立于任何特定的语言或技术。比支柱弱点更具体,但比基础弱点更普遍。类级别的弱点通常从以下维度中的1个或2个方面描述问题:行为、属性和资源。74下游组件使用的输出中特殊元素的不当中和(“注入”)
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与视图“建筑概念”(CWE-1008)相关
自然类型身份证件姓名
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1019验证输入
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与“CISQ质量措施(2020)”(CWE-1305)相关
自然类型身份证件姓名
父对象变体变体-弱点它与特定类型的产品相关,通常涉及特定的语言或技术。比基本弱点更具体。变量级别的弱点通常从以下3到5个维度描述问题:行为、属性、技术、语言和资源。564SQL注入:休眠
章节帮助此表显示了与此弱点相关的弱点和高级类别。这些关系被定义为ChildOf、ParentOf、MemberOf,可以洞察可能存在于较高和较低抽象级别的类似项。此外,定义了PeerOf和CanAlsoBe等关系,以显示用户可能想要探索的类似弱点。
+ 与“OWASP十大弱点(2013)”(CWE-928)相关
自然类型身份证件姓名
父对象变体变体-弱点它与特定类型的产品相关,通常涉及特定的语言或技术。比基本弱点更具体。变量级别的弱点通常从以下3到5个维度描述问题:行为、属性、技术、语言和资源。564SQL注入:休眠
+ 介绍模式
章节帮助不同的引入模式提供了有关如何以及何时引入此弱点的信息。阶段确定了生命周期中可能发生引入的点,而注释提供了给定阶段中与引入相关的典型场景。
相位注释
实施实现:这个弱点是在架构安全策略的实现过程中造成的。
实施这个弱点通常出现在将用户输入保存在数据库中的数据丰富的应用程序中。
+ 适用平台
章节帮助此列表显示了可能出现特定弱点的领域。这些可能是特定命名语言、操作系统、架构、范例、技术或此类平台的一类。列出了平台以及该实例出现给定弱点的频率。

语言文字

类:不特定于语言(患病率未确定)

技术

数据库服务器(患病率未确定)

+ 常见后果
章节帮助本表规定了与缺陷相关的不同个体后果。范围确定了违反的应用程序安全领域,而影响描述了如果对手成功利用此弱点所产生的负面技术影响。可能性提供了关于特定后果相对于列表中其他后果被看到的可能性的信息。例如,利用某个弱点来实现某种影响的可能性可能很高,但利用它来实现不同影响的可能性很低。
范围影响可能性
保密性

技术影响:读取应用程序数据

由于SQL数据库通常保存敏感数据,因此丢失机密性是SQL注入漏洞的常见问题。
访问控制

技术影响:旁路保护机构

如果使用糟糕的SQL命令来检查用户名和密码,则可能会以另一个之前不知道密码的用户身份连接到系统。
访问控制

技术影响:旁路保护机构

如果授权信息保存在SQL数据库中,则可以通过成功利用SQL注入漏洞来更改此信息。
完整性

技术影响:修改应用程序数据

正如可以读取敏感信息一样,也可以使用SQL注入攻击更改甚至删除此信息。
+ 利用漏洞的可能性
+ 演示示例

示例1

2008年,大量web服务器使用同一SQL注入攻击字符串遭到破坏。这一字符串针对许多不同的程序。然后,SQL注入被用于修改网站以提供恶意代码。

示例2

以下代码动态构造并执行一个SQL查询,该查询搜索与指定名称匹配的项。查询将显示的项目限制为所有者与当前已验证用户的用户名匹配的项目。

(错误代码)
示例语言:C#编号
...
string userName=ctx.getAuthenticatedUserName();
string query=“SELECT*FROM items WHERE owner='”+userName+“'AND itemname='”+itemname。文本+“”;
sda=新的SqlDataAdapter(查询,连接);
DataTable dt=新的DataTable();
星期四。填充(dt);
...

此代码打算执行的查询如下:

(信息性)
 
选择*FROM items WHERE owner=<userName>AND itemname=<itemname>;

但是,由于查询是通过连接常量基查询字符串和用户输入字符串来动态构造的,因此只有当itemName不包含单引号字符时,查询才能正常运行。如果用户名为wiley的攻击者输入字符串:

(攻击代码)
 
name“OR”a“=”a

对于itemName,则查询如下:

(攻击代码)
 
SELECT*FROM items WHERE owner='wiley'AND itemname='name'OR'a'='a';从项目中选择*;

增加了:

(攻击代码)
 
或“a”=“a”

条件导致WHERE子句的计算结果始终为true,因此查询在逻辑上与更简单的查询等效:

(攻击代码)
 
从项目中选择*;

对查询的这种简化允许攻击者绕过查询只返回经过身份验证的用户拥有的项目的要求;查询现在返回存储在items表中的所有条目,而不管其指定的所有者是谁。

示例3

此示例检查传递给上一示例中构造和执行的查询的不同恶意值的影响。

如果用户名为wiley的攻击者输入字符串:

(攻击代码)
 
名称';删除项目--

对于itemName,则查询成为以下两个查询:

(攻击代码)
示例语言:SQL语言
SELECT*FROM items WHERE owner='wiley'AND itemname='name';从项目中选择*;
删除项目;
--'

许多数据库服务器,包括Microsoft(R)SQL Server 2000,都允许同时执行多个用分号分隔的SQL语句。虽然此攻击字符串会在Oracle和其他不允许批量执行以分号分隔的语句的数据库服务器上导致错误,但在允许批量执行的数据库上,此类攻击允许攻击者对数据库执行任意命令。

请注意后面的一对连字符(--),它向大多数数据库服务器指定语句的其余部分将被视为注释而不执行。在这种情况下,注释字符用于删除修改后的查询中剩余的尾随单引号。在不允许以这种方式使用注释的数据库上,使用与前一示例中所示类似的技巧仍然可以使一般攻击有效。

如果攻击者输入字符串

(攻击代码)
 
名称';删除项目;SELECT*FROM items WHERE“a”=“a”

然后将创建以下三个有效语句:

(攻击代码)
 
SELECT*FROM items WHERE owner='wiley'AND itemname='name';从项目中选择*;
删除项目;
SELECT*FROM items WHERE'a'='a';

防止SQL注入攻击的一种传统方法是将其作为输入验证问题进行处理,要么只接受安全值允许列表中的字符,要么识别并逃离潜在恶意值的denylist。允许列表可以是强制执行严格的输入验证规则的一种非常有效的方法,但参数化SQL语句需要较少的维护,并且可以在安全性方面提供更多的保证。几乎总是这样,拒绝列表中充满了漏洞,使得它无法有效地防止SQL注入攻击。例如,攻击者可以:

  • 未引用的目标字段
  • 寻找方法绕过对某些转义元字符的需要
  • 使用存储过程隐藏注入的元字符。

手动转义SQL查询输入中的字符可能会有所帮助,但这不会使应用程序免受SQL注入攻击。

另一种常见的处理SQL注入攻击的解决方案是使用存储过程。尽管存储过程可以防止某些类型的SQL注入攻击,但它们不能防止其他许多攻击。例如,以下PL/SQL过程容易受到与第一个示例中相同的SQL注入攻击。

(错误代码)
 
程序get_item(itm_cv IN OUT ItmCurTyp,在varchar2中为usr,在varchar2中为itm)
为打开itm_cv
'SELECT*FROM items WHERE'||'owner='||usr||'AND itemname='||itm||';
结束get_item;

存储过程通常通过限制可以传递到其参数的语句类型来帮助防止SQL注入攻击。然而,有很多方法可以绕过这些限制,还有许多有趣的语句仍然可以传递给存储过程。同样,存储过程可以防止一些攻击,但它们不会使您的应用程序免受SQL注入攻击。

示例4

MS SQL有一个内置函数,可以执行shell命令。在这种情况下,SQL注入可能是灾难性的。例如,表单查询:

(错误代码)
 
选择商品,从产品定价,其中ITEM_CATEGORY=“$user_input”按价格订购

其中$user_input来自不受信任的源。

如果用户提供字符串:

(攻击代码)
 
'; 执行主机。。xp_cmdshell“目录”--

查询将采用以下形式:

(攻击代码)
 
SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=“”;执行主机。。xp_cmdshell'dir'--'按价格订购

现在,这个查询可以分解为:

  1. 第一个SQL查询:SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=“”;
  2. 第二个SQL查询,在shell:exec master中执行dir命令。。xp_cmdshell“目录”
  3. MS SQL注释:--'按价格订购

可以看出,恶意输入将查询的语义更改为查询、shell命令执行和注释。

示例5

此代码旨在打印给定消息ID的消息摘要。

(错误代码)
示例语言:PHP程序
$id=$_COOKIE[“中间”];
mysql_query(“SELECT MessageID,Subject FROM messages WHERE MessageID='$id'”);

程序员可能在假定攻击者无法修改cookie的情况下跳过了对$id的任何输入验证。然而,使用自定义客户端代码甚至在web浏览器中都很容易做到这一点。

虽然$id在对mysql_query()的调用中用单引号括起来,但攻击者只需将传入的mid-cookie更改为:

(攻击代码)
 
1432’或‘1’=‘1

这将生成结果查询:

(结果)
 
SELECT MessageID,Subject FROM消息WHERE MessageID=“1432”或“1”=“1”

这不仅将检索1432号消息,还将检索所有其他消息。

在这种情况下,程序员可以对代码进行简单修改,以消除SQL注入:

(良好代码)
示例语言:PHP程序
$id=intval($_COOKIE[“mid”]);
mysql_query(“SELECT MessageID,Subject FROM messages WHERE MessageID='$id'”);

然而,如果此代码旨在支持具有不同消息框的多个用户,则代码可能还需要进行访问控制检查(CWE-285型)以确保应用程序用户具有查看该消息的权限。

示例6

本例尝试使用用户提供的姓氏并将其输入数据库。

(错误代码)
示例语言:波尔
$userKey=获取用户ID();
$name=获取用户输入();

#确保只允许使用字母、连字符和撇号
$name=allowList($name,“^a-zA-z'-$”);
$query=“INSERT INTO last_names VALUES('$userKey','$name')”;

虽然程序员将allowlist应用于用户输入,但它有缺点。首先,用户仍然可以提供连字符,在SQL中用作注释结构。如果用户指定“--”,则语句的其余部分将被视为注释,这可能会绕过安全逻辑。此外,allowlist允许撇号,这也是SQL中的数据/命令分隔符。如果用户提供带撇号的名称,他们可能会更改整个语句的结构,甚至更改程序的控制流,可能会访问或修改机密信息。在这种情况下,连字符和撇号都是姓氏的合法字符,需要允许使用它们。相反,程序员可能希望使用准备好的语句或对输入应用编码例程,以防止任何数据/指令误解。

+ 观察到的示例
参考描述
使用精心编制的证书字段在安全产品仪表板中注入SQL
根据CISA KEV,在时间和计费软件中进行SQL注入。
通过特制的Host标头在文件传输系统中注入SQL,根据CISA KEV在野外进行攻击。
根据CISA KEV,在防火墙产品的管理界面或用户门户中注入SQL。
用Go编写的自动化系统包含易受SQL注入攻击的API,使得攻击者能够读取特权数据。
链:库中用于数据库身份验证的SQL注入允许SQL注入和身份验证绕过。
通过应该是数字的ID进行SQL注入。
通过应该是数字的ID进行SQL注入。
通过用户名进行SQL注入。
通过用户名或密码字段进行SQL注入。
安全产品中的SQL注入,使用精心编制的组名。
身份验证库中的SQL注入。
漏洞管理和报告工具中的SQL注入,使用精心编制的密码。
+ 潜在缓解措施

阶段:建筑与设计

战略:图书馆或框架

使用一个经过审查的库或框架,该库或框架不允许出现此漏洞,或者提供使此漏洞更容易避免的构造。

例如,考虑使用Hibernate或EnterpriseJavaBeans等持久层,如果使用得当,它们可以针对SQL注入提供显著的保护。

阶段:建筑与设计

策略:参数化

如果可用,请使用自动强制数据和代码分离的结构化机制。这些机制可能能够自动提供相关的引用、编码和验证,而不是依赖于开发人员在生成输出的每个点提供此功能。

使用准备好的语句、参数化查询或存储过程处理SQL查询。这些功能应该接受参数或变量,并支持强类型。不要使用“exec”或类似功能在这些功能中动态构造和执行查询字符串,因为这可能会再次引入SQL注入的可能性。[参考-867]

阶段:建筑和设计;操作

战略:环境硬化

使用完成必要任务所需的最低权限运行代码[参考-76]. 如果可能,请创建仅用于单个任务的具有有限权限的独立帐户。这样,成功的攻击不会立即让攻击者访问软件的其余部分或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作中。

具体来说,在创建SQL数据库的用户帐户时,请遵循最小权限原则。数据库用户只应具有使用其帐户所需的最低权限。如果系统要求表明用户可以读取和修改自己的数据,则限制其权限,使其无法读取/写入其他人的数据。对所有数据库对象使用尽可能严格的权限,例如仅对存储过程执行。

阶段:建筑与设计

对于在客户端执行的任何安全检查,请确保在服务器端重复这些检查,以避免CWE-602型。攻击者可以在执行检查后修改值,或更改客户端以完全删除客户端检查,从而绕过客户端检查。然后,这些修改后的值将提交给服务器。

阶段:实施

策略:输出编码

虽然使用将控制和数据混合在一起的动态生成的查询字符串、代码或命令有风险,但有时这可能是不可避免的。正确引用参数并转义这些参数中的任何特殊字符。最保守的方法是转义或过滤所有未通过严格allowlist的字符(例如所有非字母数字或空格的字符)。如果仍然需要一些特殊字符,如空格,请在转义/筛选步骤后将每个参数用引号括起来。小心参数注入(CWE-88型).

这些功能可以在数据库或编程语言中使用,而不是构建新的实现。例如,Oracle DBMS_ASSERT包可以检查或强制参数具有某些属性,这些属性使其不易受到SQL注入的攻击。对于MySQL,MySQL_real_escape_string()API函数在C和PHP中都可用。

阶段:实施

策略:输入验证

假设所有输入都是恶意的。使用“接受已知良好”输入验证策略,即使用严格符合规范的可接受输入列表。拒绝任何不严格符合规范的输入,或将其转换为符合规范的内容。

在执行输入验证时,请考虑所有可能相关的属性,包括长度、输入类型、可接受值的完整范围、缺少或额外输入、语法、相关字段的一致性以及对业务规则的符合性。作为业务规则逻辑的一个示例,“boat”可能在语法上有效,因为它只包含字母数字字符,但如果输入只应包含“红色”或“蓝色”等颜色,则它无效

不要完全依赖于查找恶意或格式错误的输入。这可能会错过至少一个不需要的输入,尤其是在代码的环境发生变化时。这可以为攻击者提供足够的空间来绕过预期的验证。然而,denylists可以用于检测潜在的攻击,或确定哪些输入格式异常,应该彻底拒绝。

构造SQL查询字符串时,请使用严格的allowlists,根据请求中参数的预期值限制字符集。这将间接限制攻击的范围,但此技术不如正确的输出编码和转义重要。

请注意,正确的输出编码、转义和引用是防止SQL注入的最有效解决方案,尽管输入验证可能提供一些深入防御。这是因为它有效地限制了输出中出现的内容。输入验证并不总是阻止SQL注入,尤其是当您需要支持可能包含任意字符的自由格式文本字段时。例如,名字“O'Reilly”可能会通过验证步骤,因为它是英语中常见的姓氏。但是,它不能直接插入数据库,因为它包含“”撇号字符,需要转义或以其他方式处理。在这种情况下,去掉撇号可能会降低SQL注入的风险,但它会产生错误的行为,因为会记录错误的名称。

在可行的情况下,最安全的做法可能是完全禁止元字符,而不是转义它们。这将提供一些纵深防御。数据输入数据库后,以后的进程可能会在使用前忽略转义元字符,并且您可能无法控制这些进程。

阶段:建筑与设计

战略:通过转换实施

当可接受对象集(如文件名或URL)有限或已知时,请创建一个从一组固定输入值(如数字ID)到实际文件名或URLs的映射,并拒绝所有其他输入。

阶段:实施

确保错误消息只包含对目标受众有用的最少细节,而不包含其他人。这些消息需要在过于隐晦(可能会混淆用户)和过于详细(可能会泄露更多信息)之间取得平衡。消息不应显示用于确定错误的方法。攻击者可以使用详细信息来改进或优化其原始攻击,从而增加成功的机会。

如果必须捕获错误的某些细节,请将其记录在日志消息中,但要考虑如果攻击者可以查看日志消息会发生什么情况。绝不应将高度敏感的信息(如密码)保存到日志文件中。

避免不一致的消息传递,因为这可能会意外地向攻击者提示内部状态,例如用户帐户是否存在。

在SQL注入的上下文中,揭示SQL查询结构的错误消息可以帮助攻击者定制成功的攻击字符串。

阶段:操作

策略:防火墙

使用可以检测针对此漏洞的攻击的应用程序防火墙。在无法修复代码的情况下(因为代码由第三方控制),作为应用更全面的软件保证措施时的紧急预防措施,或提供深入防御,这都是有益的。

有效性:中等

注:应用程序防火墙可能无法覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,例如使用格式错误的输入,而接收这些输入的组件仍然可以处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,定制可能需要一些手动操作。

阶段:运营;实施

战略:环境硬化

使用PHP时,请配置应用程序,使其不使用register_globals。在实现过程中,开发应用程序,使其不依赖于此功能,但要注意实现register_globals仿真,该仿真可能存在以下缺陷CWE-95型,CWE-621型和类似问题。
+ 检测方法

自动静态分析

通常可以使用自动静态分析工具检测到该弱点。许多现代工具使用数据流分析或基于约束的技术来最小化误报数量。

自动静态分析可能无法识别何时执行了正确的输入验证,从而导致误报,即没有任何安全后果或不需要任何代码更改的警告。

自动静态分析可能无法检测到间接调用SQL命令的自定义API函数或第三方库的使用情况,从而导致误报,尤其是在API/库代码不可用于分析的情况下。

注:这不是一个完美的解决方案,因为100%的准确性和覆盖率是不可行的。

自动动态分析

可以使用动态工具和技术来检测此弱点,这些工具和技术使用具有许多不同输入的大型测试套件与软件交互,例如模糊测试(fuzzing)、健壮性测试和故障注入。软件的运行速度可能会减慢,但不应变得不稳定、崩溃或生成错误的结果。

有效性:中等

手动分析

手动分析可能有助于发现这一弱点,但它可能无法在有限的时间限制内实现所需的代码覆盖率。这对于所有输入都必须考虑的弱点来说变得很困难,因为攻击面可能太大。

自动静态分析-二进制或字节码

根据SOAR,以下检测技术可能有用:

高性价比:
  • 字节码弱点分析-包括反汇编程序+源代码弱点分析
  • 二进制弱点分析-包括反汇编程序+源代码弱点分析

有效性:高

具有自动结果解释的动态分析

根据SOAR,以下检测技术可能有用:

高性价比:
  • 数据库扫描仪
部分覆盖的成本效益:
  • Web应用程序扫描仪
  • Web服务扫描仪

有效性:高

动态分析与手动结果解释

根据SOAR,以下检测技术可能有用:

部分覆盖的成本效益:
  • 模糊测试仪
  • 基于框架的模糊器

有效性:SOAR部分

手动静态分析-源代码

根据SOAR,以下检测技术可能有用:

高性价比:
  • 手动源代码审查(非检查)
部分覆盖的成本效益:
  • 集中手动抽查-集中手动分析源

有效性:高

自动静态分析-源代码

根据SOAR,以下检测技术可能有用:

高性价比:
  • 源代码Weakness Analyzer
  • 上下文配置的源代码弱点分析器

有效性:高

架构(Architecture)或设计评审

根据SOAR,以下检测技术可能有用:

高性价比:
  • 形式方法/正确构造
部分覆盖的成本效益:
  • 检查(IEEE 1028标准)(可适用于需求、设计、源代码等)

有效性:高

+ 会员资格
章节帮助此MemberOf Relationships表显示了引用此弱点作为成员的其他CWE类别和视图。此信息通常有助于了解外部信息源中的弱点。
自然类型身份证件姓名
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。6352008年至2016年NVD最初使用的弱点
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。713OWASP 2007年前十大A2类-注射缺陷
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。722OWASP 2004年前十名A1类-未经验证的输入
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。727OWASP 2004年十大A6类-喷射缺陷
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。7512009年前25名-组件之间的不安全交互
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。8012010年前25名-组件之间的不安全交互
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。810OWASP 2010年十大A1类-注射
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。8642011年前25名-组件之间的不安全交互
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。884CWE交叉段
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。929OWASP 2013年前十大A1类-喷射
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。990SFP次要群集:命令的输入被篡改
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。10057PK-输入验证和表示
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1027OWASP 2017年前十大A1类-注射
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1131CISQ质量措施(2016)-安全
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。12002019年CWE前25个最危险软件错误的弱点
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1308CISQ质量措施-安全
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。13372021年CWE前25个最危险软件的弱点
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。1340CISQ数据保护措施
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1347OWASP 2021十大类A03:2021-喷射
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。13502020年CWE前25个最危险软件的弱点
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。13872022年CWE前25个最危险软件的弱点
成员类别类别-一个CWE条目,其中包含一组具有共同特征的其他条目。1409综合分类:注射
成员查看视图-CWE条目的子集,提供了检查CWE内容的方法。两个主要的视图结构是切片(平面列表)和图形(包含条目之间的关系)。14252023年CWE前25个最危险软件的弱点
+ 漏洞映射说明

用法:允许

(此CWE ID可用于映射到实际漏洞)

原因:可接受用途

理论基础:

此CWE条目处于基本抽象级别,这是映射漏洞根源的首选抽象级别。

评论:

仔细阅读名称和描述,以确保此映射适合。不要试图“强制”映射到较低级别的Base/Variant,只是为了符合此首选抽象级别。
+ 笔记

关系

SQL注入可能是由特殊字符管理不当、MAID或denylist/allowlist问题导致的。它可能是身份验证错误的主要原因。
+ 分类映射
映射的分类名称节点ID配合映射的节点名称
PLOVER公司SQL注入
7个邪恶王国SQL注入
夹子SQL注入
OWASP 2007年前十名A2类CWE更具体注入缺陷
OWASP 2004年前十名A1类CWE更具体未验证的输入
OWASP 2004年前十名A6级CWE更具体注入缺陷
WASC公司19SQL注入
软件故障模式第24页命令的倾斜输入
OMG ASCSM公司ASCSM公司-CWE-89型
SEI CERT Oracle Java编码标准IDS00-J公司完全正确阻止SQL注入
+ 工具书类
[REF-44]迈克尔·霍华德,大卫·勒布朗和约翰·维埃加。“软件安全的24大罪过”。“Sin 1:SQL注入”第3页。麦格劳-希尔。2010
[REF-7]迈克尔·霍华德和大卫·勒布朗。“写入安全代码”。第12章,“数据库输入问题”第397页。第2版。微软出版社。2002-12-04. <https://www.microsoftpressstore.com/store/writing-secure-code-9780735617223>.
[REF-867]OWASP公司。“SQL注入防止作弊表”<http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet>.
[REF-868]史蒂文·弗里德尔。“SQL注入攻击示例”。2007-10-10. <http://www.unixwiz.net/techtips/sql-injection.html>.
[REF-869]费鲁·马维图纳。“SQL注入作弊表”。2007-03-15. <https://web.archive.org/web/20080126180244/http://ferruh.mavituna.com/sql-注射-加热片-oku/>.验证URL:2023-04-07.
[REF-870]David Litchfield、Chris Anley、John Heasman和比尔·格林德利。《数据库黑客手册:保护数据库服务器》。威利。2005-07-14.
[REF-871]戴维·利奇菲尔德。《甲骨文黑客手册:攻击和保护甲骨文》。威利。2007-01-30.
[REF-873]微软安全漏洞研究与防御。“SQL注入攻击”<https://msrc.microsoft.com/blog/2008/05/sql-inpjection-attack/>.验证URL:2023-04-07.
[REF-874]迈克尔·霍华德。“给予SQL注入应有的尊重”。2008-05-15. <https://learn.microsoft.com/en-us/archive/blogs/michael_howard/giving-sql-injection-the-respect-it-worned>.验证URL:2023-04-07.
[REF-875]弗兰克·金。“前25名系列-排名2-SQL注入”。SANS软件安全研究所。2010-03-01. <https://www.sans.org/blog/top-25-series-rank-2-sql-injection网站/>.验证URL:2023-04-07.
[REF-76]肖恩·巴纳姆和迈克尔·盖奇克(Michael Gegick)。“最低特权”。2005-09-14. <https://web.archive.org/web/2021120901121/https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-特权>.验证URL:2023-04-07.
[REF-62]马克·多德,约翰·麦克唐纳和贾斯汀·舒赫。“软件安全评估的艺术”。第8章,“SQL查询”,第431页。第1版。艾迪森·卫斯理。2006
[REF-62]马克·多德、约翰·麦克唐纳和贾斯汀·舒赫。“软件安全评估的艺术”。第17章,“SQL注入”,第1061页。第1版。艾迪森·卫斯理。2006
[REF-962]对象管理组(OMG)。“自动源代码安全措施(ASCSM)”。ASCSM-CWE-89。2016-01. <http://www.omg.org/spec/ASCSM/1.0/>.
+ 内容历史记录
+ 提交的资料
提交日期提交人组织
2006-07-19
(CWE草案32006-07-19)
PLOVER公司
+ 修改
修改日期修饰符组织
2008-07-01
(CWE 1.0,2008-09-09)
埃里克·达尔奇Cigital公司
更新的简介时间
2008-08-01
(CWE 1.02008-09-09)
KDM分析
添加/更新了白盒定义
2008-08-15
(CWE 1.0,2008-09-09)
维拉科德
建议的OWASP 2004年十大地图
2008-09-08CWE内容团队米特里
更新的适用平台、通用结果、介绍模式、名称、关系、其他注释、关系注释、分类映射
2008-10-14CWE内容团队米特里
更新的描述
2008-11-24CWE内容团队米特里
更新的观察值_示例
2009-01-12CWE内容团队米特里
更新的演示示例、说明、为展开启用因子、介绍模式、名称、观察到的示例、其他注释、潜在原因、参考、关系
2009-03-10CWE内容团队米特里
更新的潜在动机
2009-05-27CWE内容团队米特里
更新了演示示例、名称、相关攻击模式
2009-07-17KDM分析
改进了White_Box_Definition
2009-07-27CWE内容团队米特里
更新了描述、名称、白盒定义
2009-12-28CWE内容团队米特里
更新的潜在动机
2010-02-16CWE内容团队米特里
更新的演示示例、检测因素、潜在原因、参考、关系、分类映射
2010-04-05CWE内容团队米特里
更新的演示示例、潜在动机
2010-06-21CWE内容团队米特里
更新的通用结果、演示示例、描述、检测因素、名称、潜在原因、参考、关系
2010-09-27CWE内容团队米特里
更新的潜在动机
2011-03-29CWE内容团队米特里
更新的演示示例
2011-06-01CWE内容团队米特里
更新的Common_Consequences
2011-06-27CWE内容团队米特里
更新的关系
2011-09-13CWE内容团队米特里
更新的潜在动机、参考
2012-05-11CWE内容团队米特里
更新的潜在动机、参考、相关攻击模式、关系
2012-10-30CWE内容团队米特里
更新的潜在动机
2013-07-17CWE内容团队米特里
更新的关系
2014-06-23CWE内容团队米特里
更新的关系
2014-07-30CWE内容团队米特里
更新的Detection_Factors、Relationships、Taxonomy_Mappings
2015-12-07CWE内容团队米特里
更新的关系
2017-05-03CWE内容团队米特里
更新的关系
2017-11-08CWE内容团队米特里
更新的适用平台、演示示例、为展开启用因子、展开的可能性、引入模式、观察示例、参考、关系、白盒定义
2018-03-27CWE内容团队米特里
更新的引用,关系
2019-01-03CWE内容团队米特里
更新的引用、关系、分类映射
2019-06-20CWE内容团队米特里
更新的关系
2019-09-19CWE内容团队米特里
更新的关系
2020-02-24CWE内容团队米特里
更新的潜在动机、关系、介绍时间
2020-06-25CWE内容团队米特里
更新的演示示例、潜在动机、关系注释
2020-08-20CWE内容团队米特里
更新的关系
2020-12-10CWE内容团队米特里
更新的潜在动机、关系
2021-07-20CWE内容团队米特里
更新的关系
2021-10-28CWE内容团队米特里
更新的关系
2022-06-28CWE内容团队米特里
更新的观察值_示例,关系
2022-10-13CWE内容团队米特里
更新的Observed_Examples,参考
2023-01-31CWE内容团队米特里
更新的演示示例,说明
2023-04-27CWE内容团队米特里
更新的参考、关系、介绍时间
2023-06-29CWE内容团队米特里
更新的Mapping_Notes,关系
2024-02-29
(CWE 4.142024-02-29)
CWE内容团队米特里
更新的演示示例、观察示例
+ 以前的条目名称
更改日期上一个条目名称
2008-04-11SQL注入
2008-09-09无法将数据清理到SQL查询中(也称为“SQL注入”)
2009-01-12无法清理SQL查询中的数据(也称为“SQL注入”)
2009-05-27未能保留SQL查询结构(也称为“SQL注入”)
2009-07-27未能保留SQL查询结构(“SQL注入”)
2010-06-21SQL命令中使用的特殊元素清理不当(“SQL注入”)
页面上次更新时间:2024年2月29日