描述
产品接收输入或数据,但它不验证或不正确验证输入所需的属性的过程安全、正确的数据。
扩展描述
输入验证检查潜在的危险是一个经常使用的技术投入,以确保输入是安全的在代码中进行处理,或与其他组件进行通信。当软件不正确验证输入,攻击者可以手工输入所期望的形式不是应用程序的其余部分。这将导致部分系统收到意想不到的输入,这可能会导致改变控制流,任意一个资源的控制权,或任意代码执行。
输入验证并不是唯一的技术处理输入,然而。其他技术尝试变换输入变成安全的潜在危险,如过滤(cwe - 790 )——试图消除危险的输入——或编码/转义(cwe - 116 ),试图确保输入不是误解当它是包含在输出到另一个组件。其他技术存在(见cwe - 138 更多的例子。)
输入验证可应用于:
原始数据(字符串、数字、参数文件内容等。
元数据,原始数据的信息,如标题或大小
可以是简单的或结构化的数据。结构化数据可以组成很多嵌套层,的组合组成的元数据和原始数据,与其他简单的或结构化数据。
许多原始数据或元数据的属性可能需要验证后进入代码,如:
指定数量如大小、长度、频率、价格,速度,操作的数量,时间,等等。
暗示或派生的数量,如文件的实际大小,而不是指定的大小
索引、抵消或职位到更复杂的数据结构
到哈希表中符号键或其他元素,关联数组等。
格式良好性,即语法正确,符合预期的语法
词法记号正确性,遵守规则作为一个令牌
指定或派生类型,输入的实际类型(或输入似乎是什么)
之间的一致性——单个数据元素之间,原始数据和元数据,引用之间等。
符合特定领域的规则,例如业务逻辑
等价——确保等效输入相同的对待
真实性、所有权或其他证明输入,例如加密签名来证明数据的来源
暗示或派生属性数据必须经常计算或推断的代码本身。错误在派生属性可能被视为一个因素不适当的输入验证。
注意,“输入验证”对不同的人有着非常不同的含义,或在不同的分类方案。时必须谨慎引用这个CWE条目或映射。例如,一些弱点可能涉及无意中给攻击者控制在一个输入时不应该能够提供一个输入,但有时这被称为输入验证。
最后,重要的是要强调输入验证和输出逃离之间的差别往往是模糊的,和开发人员必须小心理解的差异,包括如何输入验证并不总是足以防止漏洞,特别是严格的数据类型必须支持较少,如自由格式的文本。考虑一个SQL注入场景,在该场景中,一个人的姓是插入一个查询。“O ' reilly”这个名字可能会通过验证步骤,因为它是一种常见的姓氏在英语语言。然而,这有效的名称不能直接插入到数据库,因为它包含了““撇号的角色,这将需要转义或转换。在这种情况下,删除撇号可能会减少SQL注入的风险,但是它会产生不正确的行为,因为错误的名字将被记录下来。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。
707年
不适当的中和
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
179年
不正确的行为秩序:早期验证
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
622年
不当的验证函数钩参数
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1173年
验证框架的使用不当
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1284年
不当验证指定数量的输入
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1285年
验证指定的索引位置不当,或抵消输入
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1286年
不当语法正确性的验证输入
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1287年
不当的验证指定的类型的输入
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1288年
不当内的一致性验证输入
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1289年
不当的不安全的等价验证输入
PeerOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
345年
验证数据的真实性不足
CanPrecede
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
22
不当限制限制目录的路径名(“路径遍历”)
CanPrecede
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
41
不当的解决路径等效
CanPrecede
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
74年
不当中和下游组件使用的特殊元素的输出(注射)
CanPrecede
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
119年
不当的操作限制的范围内一个内存缓冲区
CanPrecede
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
770年
资源配置没有限制或节流
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“七有害的王国”(cwe - 700)
自然
类型
ID
的名字
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
15
外部控制系统或配置设置
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
73年
外部控制文件名或路径
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
102年
Struts:重复验证形式
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
103年
Struts:不完整的validate()方法的定义
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
104年
Struts:表单Bean不扩展验证类
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
105年
Struts:表单字段验证器
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
106年
Struts:不使用的插件框架
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
107年
Struts:未使用的验证形式
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
108年
Struts:用户搜索行动形式
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
109年
Struts:验证器关闭
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
110年
Struts:没有表单字段验证器
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
111年
直接使用不安全的JNI
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
112年
失踪的XML验证
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
113年
不当中和CRLF序列在HTTP头(HTTP请求/响应分裂)
ParentOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
114年
过程控制
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
117年
不正确的输出中和日志
ParentOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
119年
不当的操作限制的范围内一个内存缓冲区
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
120年
缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
134年
使用外部控制的格式字符串
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
170年
不当零终止
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
190年
整数溢出或概括的
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
466年
返回指针值的预期范围之外
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
470年
使用外部控制输入选择类或代码(“不安全的反思”)
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
785年
使用路径操作函数没有Maximum-sized缓冲区
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
实现
实现:造成这一弱点在建筑安全策略的实施。
如果一个程序员认为,攻击者不能修改特定的输入,那么程序员可能不执行任何输入验证。例如,在web应用程序中,许多程序员认为饼干和隐藏表单字段从web浏览器(不能修改cwe - 472 ),虽然他们可以改变使用代理或一个自定义的程序。在客户机-服务器体系结构中,程序员可能假定客户端无法绕过安全检查,即使可以编写一个定制的客户端,跳过那些检查(cwe - 602 )。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
可用性
技术的影响: DoS:崩溃,退出或重新启动;DoS:资源消耗(CPU);DoS:资源消耗(内存)
攻击者可以提供意想不到的价值,导致程序崩溃或过度消费的资源,如内存和CPU。
保密
攻击者可以读机密数据,如果他们能够控制资源引用。
完整性 保密 可用性
攻击者可以利用恶意输入修改数据或改变控制流以意想不到的方式,包括任意命令执行。
利用的可能性
示范例子
示例1
这个例子演示了一个购物交互的用户是免费的,指定要购买物品的数量和总计算。
… 公共静态最终双价格= 20.00; int数量= currentUser.getAttribute(“数量”); 双总=价格*数量; chargeUser(总); …
用户无法控制价格变量,然而代码并不阻止一个负值指定数量。如果攻击者提供一个负数,那么用户将他们的帐户贷方记入借方。
示例2
本例要求用户一个m X n的高度和宽度最大尺寸100方格的棋盘游戏。
…
#定义MAX_DIM 100
…
/ * * /董事会维度
int m, n,错误;
board_square_t *板;
printf("请指定董事会高度:\ n”);
错误= scanf (“% d”, a&m);
如果(EOF = =错误){
死亡(“没有通过整数:死邪恶的黑客! \ n”);
}
printf("请指定板宽度:\ n”);
错误= scanf (“% d”, n);
如果(EOF = =错误){
死亡(“没有通过整数:死邪恶的黑客! \ n”);
}
如果(m > MAX_DIM | | n > MAX_DIM) {
死亡(“价值太大:死邪恶的黑客! \ n”);
}
董事会= (board_square_t *) malloc (m * n * sizeof (board_square_t));
…
虽然这个代码检查,以确保用户无法指定大,正整数和消耗过多内存,它不检查用户提供的负值。因此,攻击者可以执行资源消耗(cwe - 400 )攻击这个程序通过指定两个,大的负值,不会溢出,导致一个非常大的内存分配(cwe - 789 )甚至系统崩溃。另外,攻击者可以提供非常大的负值将导致一个整数溢出(cwe - 190 )和异常行为会取决于价值观对待剩余的项目。
示例3
下面的示例显示了一个PHP应用程序的程序员试图显示用户的生日和主页。
$生日= $ _GET['生日快乐']; $首页= $ _GET['主页'); 回声“生日:$生日< br >主页:< a href = $主页>点击这里< / >”
程序员用于生日的日期格式和美元的主页是一个有效的URL。然而,由于来自HTTP请求的值,如果攻击者可以哄骗受害者点击一个精心制作的URL与<脚本>标签提供生日的值和/或主页,则脚本将运行在客户的浏览器当web服务器回应的内容。注意,即使程序员捍卫美元的生日变量通过限制输入整数和破折号,它仍然是可能的攻击者提供一个字符串的形式:
如果这些数据是在SQL语句中使用,它将把剩余的声明发表评论。评论在声明中可以禁用其他安全相关的逻辑。在这种情况下,编码输入验证相结合将会是一个更有用的保护机制。
此外,XSS (cwe - 79 )攻击或SQL注入(cwe - 89 )只是几个潜在的后果不使用时输入验证。根据代码的上下文,CRLF注入(cwe - 93 ),参数注入(cwe - 88 ),或者命令注入(cwe - 77 )也是可能的。
示例4
下面的例子将用户提供的价值分配一个对象数组,然后作用于数组中。
私人空间buildList (int untrustedListSize) {
如果(0 > untrustedListSize) {
死亡(“负价值提供列表的大小,死邪恶的黑客!”);
}
小部件[]=新的小部件列表(untrustedListSize);
[0]=新的小部件列表();
}
这个例子中试图建立一个从用户指定的值列表,甚至检查以确保提供一个非负价值。然而,如果提供的是一个0值,代码将建立一个数组大小为0,然后尝试一个新的小部件存储在第一个位置,导致抛出一个异常。
示例5
这个Android应用程序注册处理URL时发送一个意图:
…
IntentFilter过滤器= new IntentFilter (“com.example.URLHandler.openURL”);
MyReceiver接收机= new MyReceiver ();
registerReceiver(接收机、过滤);
…
公开课UrlHandlerReceiver BroadcastReceiver{延伸
@Override
公共空间onReceive(上下文语境,意图意图){
如果(com.example.URLHandler.openURL .equals (intent.getAction ())) {
字符串URL = intent.getStringExtra (“URLToOpen”); int长度= URL.length ();
…
}
}
}
应用程序总是会假定URL包含在意图。网址不存在时,调用getStringExtra()将返回null,造成一个空指针异常当长度()。
观察到的例子
参考
描述
不当的HTTP请求输入验证IP电话,每中钢协KEV利用在野外。
Eval注入在Perl程序使用一个ID应该只包含连字符和数字。
SQL注入通过ID应该是数字。
缺乏输入验证电子表格程序导致缓冲区溢出,整数溢出,数组索引错误,和记忆腐败。
验证不足使XSS
司机安全产品允许代码执行由于验证不足
无限循环从DNS数据包标签指向自己
无限循环从DNS数据包标签指向自己
缺少参数会导致崩溃
HTTP请求与失踪的协议版本号会导致崩溃
请求参数会导致信息丢失的风险
系统崩溃与偏移值与数据包大小不一致
大小字段与数据包大小不一致导致缓冲罩上
产品使用denylist识别潜在危险的内容,允许攻击者绕过一个警告
安全旁路通过一个额外的头
空包触发重新启动
不完整的denylist允许SQL注入
空字节主题名称导致目录遍历影响更糟
内核不验证传入指针之前解除它
反病毒产品连接输入验证不足SSDT功能,允许代码执行
反病毒产品允许DoS通过零长度字段
司机从用户空间到内核不验证输入
内核不验证参数从用户发送,允许代码执行
缺乏验证字符串长度字段允许内存消耗或缓冲罩上
缺乏验证长度字段导致无限循环
缺乏验证输入的IOCTL允许代码执行
长度为零的附件导致崩溃
输入长度为零的原因未初始化的指针
通过一个畸形的框架结构崩溃
从长SMTP请求无限循环
畸形数据包的路由器崩溃
包与无效的版本号会导致空指针
崩溃通过多个“。”字符在文件扩展名
潜在的缓解措施
阶段:体系结构和设计
考虑使用language-theoretic安全(LangSec)技术,描述输入使用正式语言和建立“识别器”语言。这实际上需要一个解析不同的层,有效地执行原始输入之间的边界和内部数据表示,而不是允许解析器代码分散在整个程序中,在那里可以受到错误或不一致产生的弱点。(
ref - 1109 ][
ref - 1110 ][
ref - 1111 ]
阶段:体系结构和设计
使用一个输入验证框架如Struts或OWASP ESAPI验证API。注意,使用一个框架不会自动处理所有输入验证问题;注意可能出现的弱点从滥用框架本身(
cwe - 1173 )。
阶段:体系结构和设计;实现
理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件、电子邮件、文件、文件名、数据库,以及任何外部系统提供数据的应用程序。记住,这样的投入可以获得间接通过API调用。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does.
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免
cwe - 602 。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
即使客户端对服务器端安全检查提供最小的好处,他们仍然有用。首先,他们可以支持入侵检测。如果服务器接收输入,应该已经被客户拒绝,那么它可能是一个攻击的迹象。第二,客户端错误检查可以提供有用的反馈给用户预期的有效输入。第三,可能会有意外的服务器端处理时间的减少输入错误,虽然这通常是一个小的储蓄。
实施阶段:
当应用程序结合来自多个数据源的数据,执行验证来源之后的总和。单个数据元素可以通过验证步骤但是违反限制后的总和。
实施阶段:
特别注意验证所有输入调用代码,跨越语言边界时,如从本机代码的解释型语言。这将创建一个意想不到的语言边界之间的交互。确保你没有违反任何期望的语言接口。例如,尽管Java可能不是容易缓冲区溢出,提供一个大型参数调用本地代码可能会触发一个溢出。
实施阶段:
直接输入类型转化为预期的数据类型,比如使用一个转换函数将一个字符串转换为一个数字。预期的数据类型转换后,确保输入的值在许用值的预期范围,包含多个字段的一致性维护。
实施阶段:
输入应该解码和规范化应用程序当前的内部表示之前验证(
cwe - 180 ,
cwe - 181 )。确保您的应用程序不会无意中解码输入两次相同(
cwe - 174 )。这些错误可以用来绕过allowlist方案通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。
考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。
实施阶段:
当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
检测方法
自动静态分析
一些不当的实例输入验证可以使用自动检测到静态分析。
静态分析工具可能允许用户指定特定于应用程序的方法或函数执行输入验证;工具可能也有内置的验证框架Struts等知识。该工具可能会压制或de-prioritize任何相关的警告。这允许分析师关注领域的软件输入验证似乎并不存在。
除了前面的段落中描述的情况下,自动静态分析可能无法识别在执行适当的输入验证时,导致假阳性——即。警告,没有任何安全后果或需要任何代码更改。
人工静态分析
当自定义输入验证是必需的,例如当执行业务规则、手册分析是必要的,以确保验证是正确实施。
起毛
起毛技术可用于检测输入验证错误。当意想不到的输入提供给软件,软件不应该崩溃或者变得不稳定,它应该生成application-controlled错误消息。如果发生异常或interpreter-generated错误消息,这表明输入应用程序中没有发现和处理逻辑本身。
自动静态分析——二进制或字节码
根据飙升,以下检测技术可能是有用的:
字节码的弱点分析,包括反汇编程序+源代码弱点分析
二进制弱点分析,包括反汇编程序+源代码弱点分析
人工静态分析——二进制或字节码
根据飙升,以下检测技术可能是有用的:
动态分析与自动化的结果解释
根据飙升,以下检测技术可能是有用的:
Web应用程序扫描
Web服务的扫描仪
数据库扫描仪
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
关注人工抽查,手动分析来源
手工源代码审查(不检查)
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
源代码缺陷分析仪
Context-configured源代码分析器
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
635年
最初使用的弱点NVD从2008年到2016年
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
722年
OWASP十大2004类别A1 -用户输入
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
738年
CERT C安全编码标准(2008)第五章-整数(INT)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
742年
CERT C安全编码标准(2008)第9章-内存管理(MEM)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
746年
CERT C安全编码标准(2008)第十三章-错误处理(ERR)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
747年
CERT C安全编码标准(2008)第14章-杂项(MSC)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
751年
2009年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
872年
CERT c++安全编码部分04 -整数(INT)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
876年
CERT c++安全编码部分08 -内存管理(MEM)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
883年
CERT c++安全编码部分49 -杂项(MSC)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
994年
SFP二级集群:受污染的输入变量
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1003年
弱点简化映射的漏洞发布
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1005年
7 pk -输入验证和代表性
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1163年
SEI CERT 09 C编码标准指导方针。输入输出(FIO)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1200年
弱点在2019 CWE最危险的软件错误
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1337年
2021 CWE最危险软件的弱点的弱点
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1347年
OWASP十大2021类别A03:2021 -注射
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1350年
2020 CWE最危险软件的弱点的弱点
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1382年
ICS操作(&维护):新兴能源技术
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1387年
2022 CWE最危险软件的弱点的弱点
笔记
的关系
cwe - 116 和CWE-20 有着密切的关联,因为根据结构化信息的本质,正确输入验证可以间接地阻止特殊字符改变结构化信息的意义。例如,通过确认数字ID字段应该只包含0 - 9的字符,程序员有效地防止注入攻击。
术语
“输入验证”非常普遍,但它是用在许多不同的方式。在某些情况下使用否则会掩盖真正的潜在弱点或隐藏链接和组合关系。
有些人使用“输入验证”作为一个通用的术语,它包括许多不同的中和技术确保输入是合适的,如过滤、规范化和逃避。其他人使用术语更狭窄的背景下,仅仅指的是“检查输入是否符合预期不改变它。”CWEuses this more narrow interpretation.
维护
截至2020年,通常更喜欢使用这个条目,并经常混淆的来源。正在积极为4.1 CWE改进和后续版本。
维护
输入验证——无论是缺失或不正确的——是一个重要和普遍安全发展的一部分,它是隐含在许多不同的弱点。传统上,缓冲区溢出等问题和XSS分为输入验证问题,许多安全专家。然而,输入验证未必是唯一的保护机制可以避免这样的问题,在某些情况下甚至是不充分的。CWE团队已经开始捕捉这些微妙之处内链研究概念视图(
cwe - 1000 ),但更多的工作是必要的。
分类法映射
映射分类名称
节点ID
适合
映射节点名
7有害的王国
输入验证和代表性
OWASP十大2004
A1
CWE更具体
用户输入
CERT C安全编码
ERR07-C
喜欢功能不支持错误检查等效函数
CERT C安全编码
FIO30-C
CWE更抽象
排除用户输入的格式字符串
CERT C安全编码
MEM10-C
定义和使用验证函数的指针
WASC
20.
输入处理不当
软件故障模式
SFP25
受污染的输入变量
引用
[ref - 168] Joel Scambray迈克示玛迦勒硅镁层。“黑客暴露的Web应用程序,第二版”。输入验证攻击。麦格劳-希尔。2006-06-05。
内容的历史
提交
提交日期
提交者
组织
2006-07-19
7有害的王国
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Potential_Mitigations Time_of_Introduction
2008-08-15
Veracode
建议OWASP 2004年排名前十的映射
2008-09-08
CWE内容团队
主教法冠
更新的关系,Other_Notes Taxonomy_Mappings
2008-11-24
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2009-01-12
CWE内容团队
主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples、描述Likelihood_of_Exploit,名字,Observed_Examples, Other_Notes, Potential_Mitigations,引用,Relationship_Notes、人际关系
2009-03-10
CWE内容团队
主教法冠
更新描述,Potential_Mitigations
2009-05-27
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2009-07-27
CWE内容团队
主教法冠
更新的关系
2009-10-29
CWE内容团队
主教法冠
更新Common_Consequences、Demonstrative_Examples Maintenance_Notes、Modes_of_Introduction Observed_Examples,关系,Research_Gaps Terminology_Notes
2009-12-28
CWE内容团队
主教法冠
更新Applicable_Platforms、Demonstrative_Examples Detection_Factors
2010-02-16
CWE内容团队
主教法冠
更新Detection_Factors Potential_Mitigations、引用Taxonomy_Mappings
2010-04-05
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2010-06-21
CWE内容团队
主教法冠
更新Potential_Mitigations、Research_Gaps Terminology_Notes
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations、人际关系
2010-12-13
CWE内容团队
主教法冠
更新Demonstrative_Examples、描述
2011-03-29
CWE内容团队
主教法冠
更新Observed_Examples
2011-06-01
CWE内容团队
主教法冠
更新Applicable_Platforms、Common_Consequences Relationship_Notes
2011-09-13
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11
CWE内容团队
主教法冠
更新Demonstrative_Examples、引用Related_Attack_Patterns、人际关系
2012-10-30
CWE内容团队
主教法冠
更新Potential_Mitigations
2013-02-21
CWE内容团队
主教法冠
更新的关系
2013-07-17
CWE内容团队
主教法冠
更新的关系
2014-02-18
CWE内容团队
主教法冠
更新Demonstrative_Examples Related_Attack_Patterns
2014-07-30
CWE内容团队
主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07
CWE内容团队
主教法冠
更新的关系
2017-01-19
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2017-05-03
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2017-11-08
CWE内容团队
主教法冠
更新Modes_of_Introduction、引用关系,Taxonomy_Mappings
2018-03-27
CWE内容团队
主教法冠
更新的引用
2019-01-03
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2019-06-20
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2019-09-19
CWE内容团队
主教法冠
更新的关系
2020-02-24
CWE内容团队
主教法冠
更新Potential_Mitigations、引用Related_Attack_Patterns、人际关系
2020-06-25
CWE内容团队
主教法冠
更新Applicable_Platforms Demonstrative_Examples,描述、Maintenance_Notes Observed_Examples, Potential_Mitigations,引用,Relationship_Notes,关系,Research_Gaps Terminology_Notes
2020-08-20
CWE内容团队
主教法冠
更新Potential_Mitigations Related_Attack_Patterns,关系
2021-03-15
CWE内容团队
主教法冠
更新描述,Potential_Mitigations
2021-07-20
CWE内容团队
主教法冠
更新Related_Attack_Patterns、人际关系
2021-10-28
CWE内容团队
主教法冠
更新的关系
2022-04-28
CWE内容团队
主教法冠
更新的关系
2022-06-28
CWE内容团队
主教法冠
更新Observed_Examples、人际关系
2022-10-13
CWE内容团队
主教法冠
更新引用关系
以前的条目名称
改变日期
以前的条目名称
2009-01-12
足够的输入验证