关于保护源代码安全建议

 

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:隶书; panose-1:2 1 5 9 6 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} @font-face {font-family:"/@隶书"; panose-1:2 1 5 9 6 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; mso-outline-level:1; font-size:24.0pt; font-family:宋体; mso-bidi-font-family:宋体; font-weight:bold;} p {margin-top:0cm; margin-right:0cm; margin-bottom:7.5pt; margin-left:0cm; mso-pagination:widow-orphan; font-size:10.0pt; font-family:宋体; mso-bidi-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

关于源码安全的问题

 

源代码是软件开发最重要的资源,也是开发人员思想、经验和工作的结晶。对于软件开发来说,源代码的安全是一个很重要的问题,同时也是比较难处理的问题,原因在于:
一、对软件开发组织来说,需要保证源代码安全,主要表现在:
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
、其它模块
其它模块一般使用源码开放方式进行开发,体现对开发人员的信任、对开发人员的激励,便于尽快提高开发人员的技术水平,减少重复开发的可能性,提高开发、调试、测试的效率,提高对客户的服务水平。

 

-------------------------------------------------------------------------------------------

*****************************************************************

-------------------------------------------------------------------------------------------

 

基于以上这些原因,我在此谨提出我个人意见。

 

金融理财软件,我下载了本公司和同行的几款试用软件,试用、对比、研究软件构架之后,发现软件都是基于 windows 平台,金融数据来源接口几乎相同,核心和优势都体现在给客户提供的各种经济指数指标是否准确,及时,可靠,及软件的用户体验,投资工具、解决方案是否可行,先进!

所以针对于北京指南针公司产品来说, 基本上对所有源代码都进行保护是不现实的,也是没有必要的。真正需要保护的是体现了公司特有技术,或包含公司核心竞争力的代码。

然而贵公司 软件最核心的部分应该在于:金融指数指标的算法,软件的富客户端这两个模块。 对这部分代码可以由一个核心小组来维护,核心小组的成员自然是挑选值得信任的。其它人看不到这部分源代码,只能得到DLL 库之类。(但是现在,dll 库也“能”实现反编译)被保护的源代码需要保存在单独的版本控制系统中。只有把它们分离出来,才能采取其它保护措施。基本上那些保护机密文件的措施都可以,比如严格的物理与逻辑访问控制措施,物理上的对外隔绝,网络隔离,安装网络入侵检测系统,24 小时摄像监控,等等。(您可以找本信息安全管理方面的书看看)

总之要谈保护,首先要识别哪些东西需要保护。兵法说处处设防等于不设防。

另外再提几个措施:

措施一:是可以跟主要开发人员签订保密协议,在法律上来保护公司的合法利益。

措施二:开发人员不仅使用局域网的 开发用机。另外 公司单独设置几台 办公用机,供员上网工查阅资料,或娱乐用。

针对于有些公司纯粹地通过禁止员工上网,屏蔽usb 接口, 无法打印,或者安装监视器等手段来防止核心代码流失,个人感觉,这并不是一个治本的方法,反而会适得其反。

 

 

 

-------------------------------------------------------------------------------------------

*****************************************************************

-------------------------------------------------------------------------------------------

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值