自我成立IT咨询公司以来,十年间,我和全球成千上万的软件开发员打过交道,也见过各种不同的安全故障。经常会有人问我,什么是最糟糕的软件安全错误?
当然我不会像OWASP Top 10(OWASP:开放式web应用程序安全项目)那样做一个具体的列表来告诉你答案,在我看来,安全问题的发生最主要来源于两大方面:一是软件开发人员过于关注软件的功能和规格,另一个则是过于信任软件。
我遇见过的软件开发人员绝大多数都很聪明、很上进,但他们总是在压力极大的环境下工作,而且总在看似不可能完工的最后期限内将产品做出来。在这样的情况下,开发人员往往只能更为关注产品的功能,而对其他方面(比如安全)的考虑则显得不足。“客户需要什么样的功能?”这个问题似乎比“什么方面可能出岔子?”或“攻击者如何能诱骗软件出现异常行为?”来得更为迫切。
另一方面,开发人员普遍低估了隐藏的安全威胁。因为开放人员往往过于信任用户到用户在代码中所使用的应用编程接口(API)。
一旦你一味专注开发功能,而不事先做足充足准备来防止潜在供给,那么,被大部分用户列为黑名单,也是理所当然的事了。
当然,功能的开发也相当重要,但是防止代码出现异常的准备也是必不可少的。然而,做好这点并非易事。
两件事情或许对于做好这点有所帮助。首先,积极主动地通过应用软件对数据进行编排处理。前期要严格验证数据输入,后期则要确保数据输出不会给预期环境造成任何破坏。第二,实现预测异常情况,并采取合理的处理措施。只要有可能,就要积极验证所有输入的数据。比如,如果你要求的数据是整数,那么不是整数的任何数字都将是危险的,这被称为积极验证;有别于消极验证,消极验证是指仅仅寻找通常已知的危险的输入内容,并阻止那些内容输入。但我建议最好避免采用消极验证,因为我已看到无数个消极验证失败的例子了。
接下来,在输出数据时,你需要编排处理该数据,防止数据在你输出时的任何地方引起问题。比如,要是输出上下文是XML格式化的,那么你的用户数据绝对不能含有“<”或“>”之类的元素。倘若没有做到这一点,每次都会导致注入时受到攻击。
对于专业人员来说,软件就好比是小孩子,安全人员则是第一看护人,他们会注意到潜伏的危险,他们的思维模式总是习惯于最先考虑哪些方面会出岔子;开发人员则更像第二个看护人,他们尽量避免在交通高峰期时带孩子出去散步,尽量避免出岔子;而安全人员和软件人员就像两个看护人员,共同卓有成效地协同工作。这样大家在能够从中受益。
我最近与一群软件开发人员进行合作,他们似乎接受了我的这些建议,很快便心领神会。在我完成份内事后,就马上与客户进行了交谈;客户告诉我,在我这个项目完工后的一天内,他就接到了其开发人员和安全团队提出来的数次请求,要求探讨这个问题:这两个部门如何能够更好地协同工作。
注释:
OWASP Top 10是关于web应用程序安全隐患的十大列表。这个列表不但总结了web应用程序最可能、最常见、最危险的十大安全隐患,还包括了如何消除这些隐患的建议。OWASP上还有一些辅助项目和指南来帮助IT公司和开发团队来规范应用程序开发流程和测试流程,提高web产品的安全性。
作者Kenneth van Wyk 编译沈建苗
……
关注读览天下微信,
100万篇深度好文,
等你来看……