最新
推荐
2014年高等教育信息化十大“关... 01-04 教育部成立教育信息化专家组 12-24
我国首次开展全国性教育信息化... 12-22 CERNET第二十一届学术年会 11-24
|
2009年初,CWE/SANS联合发布了全球25个最危险的编程错误。这25个最危险的编程错误,它们可能导致严重的软件漏洞。这些错误频繁发生,往往容易被攻击者发现,且易于利用。Top25清单的主要目标是在软件发布之前,通过教育程序员如何消除十分常见的错误,从源头上阻止漏洞。 SANS (SysAdmin, Audit, Network, Security) 研究所是美国一个比较权威的信息安全培训与认证机构,CWE常见缺陷列表(Common Weakness Enumeration)是MITRE公司(一个非盈利机构)继CVE(Common Vulnerabilities and Exposures)之后的又一个安全漏洞词典。这份清单是SANS研究院、MITRE和许多在美国和欧洲的顶级软件安全专家的合作成果。它总结了在SANS的20大攻击向量和MITRE的常见缺陷列表(CWE)的开发中的经验。 Top25包含CWE的多个条目,可以分为以下三类:第一,组件间不安全的交互;第二,危险的资源管理;第三,可穿透的防范措施。组件间不安全的交互,包含了九个方面编程错误分析和解读。本期介绍其中的两个编程错误,即,不适当的输入验证,和不正确的编码或输出转义。 讨论 防范与缓解 1.体系结构与设计 使用输入验证框架,比如Struts 或 OWASP ESAPI 验证API。如果使用Struts,留意一下CWE-101类。 要了解所有可能进入你软件的不可信输入的来源:参数、cookie、从网络上读取的任何数据、环境变量、请求头和请求内容、URL的各组成部分、Email、文件、数据库、以及向软件提供数据的任何外部系统。务必以定义完整的接口进行输入数据的检查。 假设所有的输入都是恶意的,可以使用“只接受已知为好的”输入验证策略(也就是说,使用白名单)。拒绝所有不符合规范的输入,同时可以使用黑名单的机制来拒绝非期望的输入并检测可能的攻击。 使用标准的输入验证机制来验证所有的输入,包括长度、类型、与反、业务规则(business rules),然后才能作进一步的处理。用一个例子说明什么是业务规则逻辑:输入的“boat”可能是符合语义的(假设你期望字母和数字的组合),但是如果你所期望是某种“颜色”,这个输入就是不符合业务规则的。 许多安全检查在客户端完成,但是要确保这些检查在服务器端还要再次检查一遍,以避免CWE-603中出现的用其他客户端软件绕过客户端的检查的情况。 尽管客户端的检查对服务器端的安全帮助不大,但还是有用的。首先客户端的检查对入侵的检测是有帮助的。如果服务器端收到了应该被客户端拒绝的输入,这可能是一种攻击的征兆。其次,客户端的错误检查对正常用户输入有效的数据是有帮助的;第三,客户端的检查可以减少服务器端的处理时间,尽管这种帮助不是很大。 不要依赖黑名单的验证机制去检测恶意的输入或者输出编码(CWE-184,黑名单是不完整的)。对同样的字符可能的编码方式太多,你可能漏掉一些编码的变型。 |
版权所有:中国教育和科研计算机网网络中心 CERNIC,CERNET,京ICP备15006448号-16,京网文[2017]10376-1180号
关于假冒中国教育网的声明 | 有任何问题与建议请联络:Webmaster@staff.cernet.com