谁对商业应用程序的安全性负有最终的责任:是开发人员还是网络管理员?一方面,你可能会认为:只要从网络的访问被看护得足够好,为“只在内部使用”而开发的应用程序就是安全的。另一方面,Web应用程序的安全和其他带有供公众访问的程序的安全都需要开发人员尤其注意其安全问题。
那么如何确定你的系统是安全的呢?雇佣安全专家来测试你的系统是一个确保开发人员正在把“防弹”的应用程序做成产品的方法。
Ed Scott是一个语音通知系统提供商的软件工程主任。尽管他公司管理的信息是高度机密的,但是他从来都没有使用过内部安全审查员或者第三方安全专家。
Scott说他的公司并不认为其开发人员编写了能够抵御黑客的代码。“我们在安全上的精力主要集中在网络和系统层而不是软件开发层,”他说。
但是数据库平台的改变直接影响了Scott开发团队编写代码的方式。“由于现在我们正在使用Oracle而不是Pervasive,所以我们不得不小心地处理数据库密码,”Scott说。“使用Pervasive的时候,数据库是在操作系统和文件层受到保护的,所以我们没有使用数据库密码。”
Scott说他知道安全专家在审查他的产品时会发现什么。“我们的一些客户已经在要求我们把更多高级的安全特性加到产品里,”他说。“一个例子就是超过预先定义的一段时间后,密码会自动过期。我们大多数应用程序都没有强制密码过了一定时间以后要进行更改。”
密码保护是和软件开发相关最严肃的安全问题之一。在他的《让信息安全策略变容易,第8版(Information Security Policies
Made Easy, 8th Edition)》(PentaSafe安全技术,2001年)里,Charles Cresson Wood写道“密码绝对不要集成进X公司技术人员开发或者修改的软件里。”根据Wood,最好把安全密码保存到“系统表格或者某个其他非软件的位置”,例如单独的表格,因为这样做能让一个组织根据安全威胁来修改系统访问的参数。
Rob Valliere是一个(安全)顾问,他管理着泰国和东南亚地区Windows和Linux平台上的Web开发和Web网站产品项目。当问到代码级的安全问题时,Valliere说:“软件必须被分类、归档和备份到安全的介质上。”Valliere提醒说,他经常受雇于需要恢复已丢失源代码的公司。
在Valliere看来,开发人员不用排除把服务器名和密码集成进脚本或者应用程序的可能性。“至关重要的名字和密码应该要保存在安全配置文件代码或者数据库文件代码以外的地方,这样它们就能够很容易地更该。
“对于Web应用程序,像ASP和PHP这样的服务器脚本文件对Web或者FTP用户来说是安全的,”Valliere说。“我把这些至关重要的变量放到一个单独的服务器脚本文件里,并把这个文件包括进应用程序文件。有的时候为了增强安全性,脚本文件不被保存在Web的根目录里或者被保存在一个安全的SQL数据库里。”