程序员往往喜欢谈论如何在新的工具或自己喜爱的新版本平台将编码更快,更方便,或更优雅。虽然这可能是事实,却忽视了是多么困难和艰苦的开发高质量软件过程,实际上是没有什么工具使用的问题。
案例分析:在CWE / SANS的列表前25名最危险的软件错误。每年,该列表的编辑借鉴的经验,领先的软件安全专家的排名由频率编程错误,严重程度,以及它们的可能性将导致可利用的漏洞。今年的名单本周公布,而它包含的内容坏消息是怎样的惊喜。
这不仅是今年的名单预测,它是多余的。在这25个错误引用,有太多相同的基本劣迹 - 已几乎自编程本身的曙光围绕失误。请问我们从来没有学到什么?
同样的错误,一遍又一遍地是排在最前面的也可怕的SQL注入漏洞,Web应用程序的祸根到处称为“在SQL命令中使用的特殊元素,不正当的影响”。根据IBM的年度X - Force的趋势和风险报告,对SQL注入攻击的频率增加2008至2009年的200倍,而IBM的研究人员已经看到在过去三年每年夏天至少有一个“全球规模的”SQL注入式攻击。
SQL注入通常是不正确验证用户输入,应用程序没有检查分析,看看它是否包含可能有害的SQL代码到一个SQL查询表单数据的结果。但是,SQL注入是不是唯一的方法,用户输入可能出错。在这前25名的错误列表,大概有四分之一可以归结为投入不足验证,包括操作系统命令注入,缓冲区溢出,跨站点脚本,不验证目录路径,和不加控制输出格式字符串。
甚至比输入验证错误的更多,今年的前25名名单与各种应用程序的安全事故屡见不鲜。其中一些比较深奥的声音,如“从不受信任的功能纳入控制范围。” 但所有这些错误,在名单上排名最高的一个是“缺少关键功能验证” - 换句话说,攻击者能够获得。
发生这样的错误,发展商主要有两个原因。首先,他们可能是操作错误的假设,即根据一个给定的功能实在是太晦涩,他们无法把握的程度,攻击者可能愿意,分析其应用流找到弱点。更多的时候,然而,他们根本就没有考虑过如何重要的一个给定的函数可能是其应用程序的整体安全性。随着应用变得越来越复杂,它们的功能在多个系统和资源的分布,这是特别容易失去安全性的大画面的轨道。
我们可以从错误中吸取教训
完整CWE / SANS的列表详细,全面,突出的可读性,塞满了具体的,宝贵的意见。如果你管理一个软件开发项目,你会得到很好的服务,以传递沿链接在你的团队每个人,并鼓励他们深入研究。即使是粗略的读出,但产量的重要见解,每个开发者都应该牢记。
首先,了解你的工具,不要盲目地接受他们的特点。其中在CWE / SANS的列表给出了具体建议是:“如果你使用的是PHP,配置您的应用程序,以便它不使用register_globals的。”这样的宝石 这种特殊的意见是一样的丘陵老了,它实际上已经从PHP 4.2的默认配置。在PHP 5.3中,有问题的功能已被废弃了。坚持谁开发利用风险平台的功能,因为他们有与此相反,尽管无数的建议,值得他们所得到的。
其次,不要过于相信你的平台,因为它说是比较安全的。例如,如Java和C#语言的管理消除在运行时,做边界检查的缓冲区溢出的可能性。这意味着Java和C#程序员都是从上CWE / SANS的列表排名第三的错误屏蔽。但无论是Java和C#做任何事情,以防止SQL注入通过不合法的用户输入,这排名上比缓冲区溢出漏洞引起更高的名单。任何平台只是作为它的代码运行的安全。
第三,数据安全是困难的。除非你是专家,密码似乎是一个神秘的艺术,它的诱人的只是把它当作神奇的灰尘,你可以到你的应用程序,使他们更安全简单。同样,这一切都太容易引入您的身份验证方案的后门,如果你不把它当作在软件设计过程中的核心原则的安全性。不正确的,不一致的,或天真的安全技术的应用是特别阴险的,因为它促进了安全的错觉,甚至因为它会导致严重的漏洞。
最后,也是最重要名单提醒我们,软件的漏洞到处都是,而且几乎没有开发项目是完全安全的。随着互联网的攻击速度加快,现在还不是时候削减测试和代码审查QA人员。无论你选择什么工具,开发安全的应用程序是充满挑战和艰苦,但非常重要,现在比任何时候都多。
