软件开发过程中该采取哪些措施确保安全性?

2018-01-12 11:53:41 admin_ 3

   在做应用软件开发过程中,在软件安全和数据安全方面会采取那些措施呢?安全性一般是指数据的安全性吧,一般应当从两个方面来考虑: 

   第一,数据本身的安全性,主要是防止出现业务数据丢失,保证数据的一致性等方面,一般这些都是通过采用的软硬件平台来保障的,可能应用开发的人关心的较少。 

   第二,数据访问的安全性,系统要防止被攻击,防止越权的操作,防止个人信息被盗窃等,这里面也需要依靠一些软硬件平台和标准来实现,但是应用要考虑的东西就相对要多,根据系统的大小和设计目标而定。

u=1872724276,438910129&fm=27&gp=0.jpg

   用户的权限管理是每个系统最基本必要的功能,这个很难说要软件来完成还是系统来完成,一般应用上考虑的比较简单,因为一般的越权操作都是靠伪造身份的方法,很多身份的校验是需要一定平台支持的,应用是无能为力的,不过软件设计的时候应当考虑防止绕过软件的安全校验的层直接访问应用逻辑的可能。

   如果系统的安全要求较高,一般对系统的操作应当记录操作日志,而且可以由系统管理员监控,而且应当有类似于“总分核对”的东西。应用主要还是应当考虑怎么保证业务上的安全性,即防止用户合理合法的使用系统违规操作,系统级的安全性需要相应的软硬件平台,应用需要作的是使用这些资源而已。

   用户的权限管理应该是由系统和软件来综合完成的,最好保持两者在用户上的统一性,实现双重的访问控制。应用主要还是应当考虑怎么保证业务上的安全性,即防止用户合理合法的使用系统违规操作,系统级的安全性需要相应的软硬件平台,应用需要作的是使用这些资源而已。

   用户的权限管理应该是由系统和软件来综合完成的,最好保持两者在用户上的统一性,实现双重的访问控制。权限管理在应用的设计上不是个难题,一般你作过一个系统的权限管理,以后的基本上就改改就可以了,因为所有的组织都大体是一样的组织方法,当然“地下党”的单线联系除外。直接访问业务逻辑,比如一个系统,系统客户端运行的时候开始需要登陆,登录以后就可以使用系统,如果系统只在登录的时候校验用户的身份可能就不是个安全的作法,因为对于正常使用系统的人来说当然没关系,但是如果有人直接发送应用请求的数据包给服务器,如果应用没有方法保证该请求是通过正常的登录来的可能就有问题。

   具体业务具体分析。首先是要在业务流程上来保证,应用开发要作的是搞清楚业务的规则并在系统中体现出来,但是实际上应用开发人员会经常协助用户一起制定一些业务的规范,这个可能就脱离咱们讨论的“安全”的范围了,那是业务上的规范。

   从应用上去解决安全问题,这是个思路,但不彻底,应用必然假设在操作系统之上,如果操作系统被人窃取权限,应用再安全也没有用。软件安全问题,其实就是安全编程,这是我们都应该注意的问题,非安全编程会导致:缓冲溢出,堆溢出,单字节溢出,整形溢出,逻辑错误等等许多问题,这都有可能使入侵者直接拿到权限。安全编程不是三言两语的,只是大家在编程的时候要多多考虑,最好先学会在内核中编程的严谨性再去编写应用程序就很容易了

   一切应用安全的基础在于操作系统的安全,操作系统安全的基础又在于硬件服务器的安全,windows或者unix本身的文件访问机制是自主访问只能达到国家2级安全标准,还是非常不完善的,所以就需要先从操作系统入手解决安全问题,比如杜绝非法的系统调用,杜绝内核后门,从0层增强文件访问机制增加MAC,ACL等,在这个的基础上我们再谈上面的应用,否则一切都是空谈,目前公安部推行的国家5个等级的安全标准就是为了这个意思。

   实现软件的安全性可以从以下方面来做: 

   先要确定安全目标,然后做分布性平台对象、操作系统、认证技术的选择。检查代码的安全性(比如说代码是否模糊,密码的算法等),做软件稽核(体系结构的安全),如何有效防止溢出,访问控制,信任的管理,密码学的应用,口令认证的方式和原则等。应当先指定一个安全目标,还有也应当考虑选用的硬件产品和平台软件(中间件、数据库等)的安全性。其实与其说软件的安全性不如说系统的安全性要好些。

   目前国家正在大力实施的就是操作系统的安全,服务器的安全,目前操作系统由于没有国产化,所以目前的状况只能是加固,这作为一个过渡阶段,服务器已经国产化,比如曙光,浪潮。等这两个做好了,再谈及数据库,中间件以及上面的应用安全。至于软件编写时的安全问题,我觉得主要还是人的因素,我觉得现在很多应用程序员盲目编程不求严谨,比如malloc分配的一段内存,在其中的一个程序分支就没有释放,这很容易导致安全问题,要先从人入手。

   做各种代码或者二进制的安全检查工具,这已经有很多现成的工具了,不过主要还是人,验收也只是一个方面,并不能完全杜绝非安全编程,主要还是从程序员素质入手。