最新
推荐
2014年高等教育信息化十大“关... 01-04 教育部成立教育信息化专家组 12-24
我国首次开展全国性教育信息化... 12-22 CERNET第二十一届学术年会 11-24
| 2.实现 如果你的应用接受多个数据源,那么别忘了在数据源汇聚之后执行输入验证。单个数据元素可以通过单步的数据验证,但有意设计的数据有可能在汇聚之后突破限制。 在跨编程语言边界调用程序时一定要特别小心,比如从解释语言调用本机代码(native code),因为在语言边界之间存在一个不期望的交互。确保你没有打破你所调用语言本身的规范。比如,尽管Java可能没有缓冲区溢出的风险,但是,在Java程序中调用本机代码并属于一个很大的参数,可能会导致溢出。 直接把你输入的类型转换成期望的数据类型,比如用转换函数把字符串转换成数字。在转换成期望的类型之后,确保输入的数值在允许的范围之内,并且保证多字段的一致性。 应该首先把输入进行解码或者规范化,转换成系统内部的表示形式,然后再进行验证(CWE-180, CWE-181)。确保你的应用系统不会无意中把相同的输入解码两次(CWE-174)。因为如果在检查之后再进行解码的话,通过引入危险的输入可以逃避白名单机制的检查。建议使用类似OWASP ESAPI 规范化控制的软件库。 可以考虑对输入数据反复地执行规范化操作,直到输入不再变化为止。这是为了防止两次解码(double-decoding)和类似的场景,但是这可能会修改输入数据,把允许的数据修改成正确编码的危险内容。 3.测试 讨论 预防和减缓 1.体系结构与设计 理解使用的数据的上下文和可能的编码方式,尤其是在组件交互的边界。理解数据在不同的组件间是如何传输的。研究所有预期的通讯协议和数据表示,以确定所需要的编码策略。要特别小心的一些环境,如WWW。即使在一个文件中(如脚本部分,URIs ,CSS,属性,或HTML体),其中的编码根据位置也是各不相同。 在每个接口使用正确的编码。利用预期编码的或自动处理的库,如ESAPI Encoding API。或者,利用内置(bulit-in)的函数,但是应该是在考虑使用包封装的情况下,以免内置的功能发现存在漏洞。 在某些情况下,当输出编码不能提供一个完整的解决方案时,输入验证也是一个重要的策略。例如,你可能会提供统一的输出,而是用你输出的多个用户使用不同的编码来表示。你可能需要允许用户提供的输入包含控制信息,如支持受限的HTML标记格式的Wiki或公告。如果不得不在数据中包含控制信息,一定要使用严格的白名单以限制这些控制信息。确认所产生的语法结构是你所想要的;对于剩下的输入,把它们当作数据,使用正常的编码方法。 使用输入验证作为纵深防御措施,以减少输出编码错误的可能性。 2.需求 3.实现 来源:《中国教育网络》2009年6月刊 |
版权所有:中国教育和科研计算机网网络中心 CERNIC,CERNET,京ICP备15006448号-16,京网文[2017]10376-1180号
关于假冒中国教育网的声明 | 有任何问题与建议请联络:Webmaster@staff.cernet.com