源代码是软件开发最重要的资源,也是开发人员思想、经验和工作的结晶。对于软件开发来说,源代码的安全是一个很重要的问题,同时也是比较难处理的问题,原因在于:
一、对软件开发组织来说,需要保证源代码安全,主要表现在:
1、知识产权保护的要求
作为软件组织产品的组成部分,程序源代码属于软件组织重要的知识资产。程序源代码的泄露和流失,会给软件组织带来直接的经济损失。
2、软件产品安全性的要求
源代码中一般会包含一些敏感信息,例如加密算法、重要业务逻辑等。这一部分源代码的泄露和流失会给产品用户的数据安全带来很大风险。
3、源代码明确责任的要求
源代码的安全管理对于明确责任也很重要。哪个开发者可以对源代码进行操作,如果不能很好控制,将会给源代码的质量带来不小的影响。
二、对开发人员来说,需要开放源代码,主要表现在:
1、自己开发的源代码是开发人员思想、经验的体现,开发人员在很多时候需要通过源代码来积累知识;
2、从源代码中获得其它开发人员的开发思想和经验,实现互相学习;
3、从源代码中获得对业务逻辑、算法的资料,提高开发效率;
4、调试中可获得调用模块中的错误信息,提高调试的效率;
三、软件开发组织对开放源代码也有需求,主要表现在:
1、协作开发的需要
随着软件规模的扩大,一个软件产品会有越来越多的开发人员参与开发,每个开发人员所开发的模块或功能总会有千丝万缕的联系。协作开发带来的一个很大的问题就是交流成本的几何级增长。而开放源码可以使交流成本得到很大的降低,开发人员可以通过阅读源代码完成一些需要交流才能实现的工作。
2、互相学习的需要
俗话说闻道有先后术业有专攻,每个开发人员由于兴趣、开发工作的不同会在不同的方面拥有自己的经验教训,这些经验教训会有很大一部分从源代码中表现出来。在组织没有能力对开发人员进行专门培训,也没有能力进行专门的经验教训总结的情况下,开发人员之间的互相学习就变得很重要。这种互相学习在很大程度上就需要源代码的阅读。互相学习不仅对开发人员的成长非常有利,而且也有利于提高组织的生产效率,一部分代码编写模式会成为一些软性标准和规范,减少了一些技术的重复学习和研究。
3、服务客户的需要
根据全员服务的思路,每个人包括每个开发人员都应该能够解答和处理客户的问题。由于文档不是很完善,开发人员有时必须通过源代码来做一些必要的处理,有时还需要通过源代码来了解计算逻辑。公开的源代码可以提高开发人员服务客户的能力。
4、快速接手的需要
铁打的营盘流水的兵,开发人员的离职或多或少总会发生,但软件组织的产品开发工作却不会停止。源代码开放可以使人员离开对一个项目的影响降低,有利于快速接手离职人员的工作。
5、提高效率的需要
源代码开放可以提高代码调试、测试、系统集成的效率,对于快速定位错误、快速处理问题都有极大的好处。
6、提供二次功能开发的需要
对于某一部分源代码,开放的源代码使二次开发有了可能性,也有利于提高开发人员进行二次开发的积极性。
四、源代码安全管理还有很多限制条件
1、软件产品自身特点的限制
软件产品是一种知识产品,属于软产品,其复制、破解、反编译理论上都可以实现。特别是.Net技术产品,其反编译可达到基本还原的境地。虽然也有混淆、加密等种种方法来实现反编译的保护,但基本上都不能从根本上保护产品。因此,软件源代码的保护有时感觉就是一种心理安慰,实际上很难起到应有的作用。
2、技术能力的限制
源代码在开发人员之间保护的前提,一是每个人开发的模块要在逻辑上是独立的、平行的,二是要有足够多的逻辑独立、平行的模块。而要实现这两个条件,必须要有较高的系统分析、设计技术。而在目前的情况下,系统分析、设计技术正是最欠缺的,技术上的先天不足使得分析设计足够多的逻辑独立、平行的模块基本上没有可能。
3、开发模式的限制
目前的开发过程中,存在着一些当下还不能解决的问题:
(1)需求不清。由于客户对软件产品认识的不足和客户在IT方面的不成熟,在开发过程中客户往往不能提供清晰的需求甚至不能提供需求,需求是在开发人员的开发模型上不断完善的,功能在不断的变化甚至完全推翻模型。
(2)基本上没有分析和设计的过程,模块也在不断的改变
(3)由于客户一般急于看到产品,开发过程仓促,调试过程简单粗糙,再加上分析设计的不完善,代码本身就包含一些逻辑错误
(4)测试基本上没有,很多问题遗留给用户
这些问题的存在限制了代码的分离,使得建立起独立的模块非常困难。
4、源代码管理工具的限制
VSS是常用的源代码管理,它的共享管理方式本身就是不安全的。
5、人员素质的限制
开发人员的技术水平还较低,对业务逻辑的理解不深,使得开发出来的源代码漏洞较多。再加上分析设计的不完善,在代码引用时,错误率较高。引用代码的开发人员在调试时很难确定故障的症结,浪费较多的时间。特别是有逻辑顺序的功能模块,源代码的完全分离增加了调试的难度,增大了交流成本。
五、对策和措施
源代码的保护非常重要,开放源代码也有很多理由,软件开发组织要如何应对?
1、确定关键模块,对关键模块进行重点保护。
选择关键模块的原则可以有:
(1)包含敏感信息的模块。例如加解密算法。
(2)基本逻辑模块。例如数据库操作基本类库。
(3)功能单一、性能稳定的模块。
对这些模块,可以采取程序集强命名、混淆、加密、权限控制等各种有效方法进行保护。
2、其它模块
其它模块一般使用源码开放方式进行开发,体现对开发人员的信任、对开发人员的激励,便于尽快提高开发人员的技术水平,减少重复开发的可能性,提高开发、调试、测试的效率,提高对客户的服务水平。