历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或清除其中的漏洞。
下面列举的这些方法会有助于开发人员提高编码的安全性:
一、注意编译器警告
程序员应当使用编译器的最高警告等级。在编译过程中,应当修改程序中的错误,直到警告解除。应当使用静态和动态的分析工具来检测和清除安全缺陷。
二、根据安全策略设置软件架构
设计者应创建一个软件架构,并在设计软件的过程中实施和强化安全策略。例如,如果你的系统在不同的时间要求不同的特权,就不妨考虑将系统分解成能够互联通信的不同的子系统,每一个系统都有自己适当的特权。这种“分而治之”的方法可以有效地提高应用程序的安全性。
三、验证输入
程序设计者在设计程序时必须验证来自所有不可信数据源的输入。适当的输入验证可以清除多数软件漏洞。在设计程序时,必须对多数外部的数据源抱着怀疑的态度,其中包括命令行参数、网络接口、环境变量、用户控制的文件等。
四、保持程序简单
设计者要尽量使程序短小精悍。复杂的设计会增加实施、配置、使用过程中出现错误的可能性。程序越复杂,就需要越多的复杂的安全控制,企业需要付出的努力也就会越多。
五、拒绝默认访问
访问决策的制定应当根据许可权限而不是根据其它的任何方面。这意味着,默认情况下,应当拒绝访问,程序的保护机制应当根据“允许谁访问”来确认访问条件。
六、遵循最小特权原则
程序的每个处理过程在执行时,都应当仅使用为完成其工作而需要的最小特权。任何提升的许可权限都要尽量持续最短的时间。这种方法可以减少攻击者用提升的特权执行任意代码的可能性。
七、“净化”传送给其它系统的数据
所谓“净化”是指从用户输入的数据中清除恶意数据,如清除用户提交表单时的恶意的或错误的字符。
程序设计者必须对传送到复杂的子系统(如命令外壳、关系型数据库、购买的商业软件组件)的所有数据进行“净化”。攻击者有可能通过使用 SQL 注入命令或其它注入攻击来调用这些组件中没有被使用的功能。这未必是输入验证问题,因为被调用的复杂的子系统并不理解调用过程中的前后关系。由于调用程序 理解前后关系,所以我们要在调用子系统之前对数据进行“净化”。
八、实施深度防御
程序设计必须能够利用多种防御策略来管理风险。只有这样,才能在一层防御不够用或失效时,另外一层防御可以防止将安全设计上的缺陷变成可被利用的漏洞,从而可以限制攻击者利用漏洞的后果。例如,将安全编程技术与安全运行环境结合起来,可以减少在部署阶段残存在代码中的漏洞被攻击者在操作环境中利用的可能性。
九、使用有效的质量保证技术
良好的质量保证技术可以有效地确认和清除漏洞。模糊测试、渗透测试、源代码审计等都可以结合起来使用,以此作为一个有效的质量保证项目的一部 分。独立的安全检查可以使系统更安全。有资质的外部审查人员可以提供独立的观点,例如,外部人员有助于确认和纠正一些错误的设想。
当然,为保证代码的安全,企业应当为开发语言和平台制定并实施一套健全的编码标准。
转载自伯乐在线 http://blog.jobbole.com/16529/
分享到:
相关推荐
编码规范是软件开发中至关重要的一个方面,它不仅关乎代码的可读性和可维护性,也是团队协作的基础。程序员在编写代码时遵循一定的规范,能够提高代码质量,降低出错概率,同时也使得代码更容易被其他开发者理解和...
在整个程序员项目交接文档中,程序员需要对每个模块的数据结构和关系进行详细的记录,并且需要对每个模块的执行流程进行详细的说明。此外,程序员还需要对每个模块的功能进行详细的记录,并且需要对每个模块的实现...
编程是一项需要严谨和精确的工作,编码规范是程序员的基本素质之一,它不仅关乎代码的质量,也影响着团队协作的效率和项目的可维护性。华为作为全球知名的科技企业,其编码规范在业界具有一定的权威性和影响力。这份...
编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码 。 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品 。 为了执行规范,每个软件开发...
安全编码 安全编码(secure coding)含义: 网络安全之安全编码全文共2页,当前为第1页。安全编码旨在避免容易预防的编码缺陷,这些缺陷会造成安全风险。对软件漏洞的研究表明,大量的漏洞利用都源于—小群常见的...
### 每个程序员都该知道的10大编码原则 #### 1. 偏执 偏执在编程领域中并非负面情绪,而是一种确保代码质量和可靠性的积极态度。这意味着程序员应该始终保持怀疑的态度,对代码进行多次验证,确保没有任何遗漏或...
编码规范对程序员而言尤为重要,有以下几个原因: 一个软件的生命周期中80%花在维护上,几乎没有一个软件在其整个生命周期中,均由最初的开发人员来维护。编码规范可以改善软件的可读性,可以让程序员尽快而且彻底的...
精美的网页加上动听的音乐效果是程序员七夕告白的绝佳神器。里面包含了十三个源代码。第一个是计算你和另一半在一起的时间。只需要改动源码里面的起始时间就可以实现你想要的结果。怎么改动起始时间和怎么将音乐改成...
作为安全方面的程序员,需要看的必备书籍有哪些?
是一位台湾程序员写的,很实在.不是技术书,大家可以休闲时看看
C的安全编码要比许多经验丰富的程序员所想像的更为困难。 《C安全编码标准》是一本重要的桌面参考手册,记录了《CERT C安全编码标准》的第一次官方发布。这个标准逐项描述了C语言程序中导致软件潜在风险根源的编码...
程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词
600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员...
下面是程序员的一生中需要注意的几个方面: 1. 程序员意味着要编程序 作为一名程序员,你需要有编程序的能力和热情。编程序不仅仅是写代码,还需要有逻辑和严谨的思维方式。如果你仅仅想得到一份高薪水的工作,而...
【程序员记笔记的小工具】是一款专为程序员设计的高效笔记应用,它允许用户利用Markdown语法进行文本编辑,方便快捷地创建、管理和分享技术文档。这款工具不仅提供了对Markdown的全面支持,还具备将笔记导出为PDF和...
这意味着代码应当遵循一定的编码规范,如命名规则、注释清晰等;同时还需考虑代码的复用性和扩展性,以方便后期的维护和升级工作。 #### 四、持续集成与自动化测试 随着DevOps理念的普及,持续集成(CI)和自动化...
通过以上内容,我们可以看到,成为高效程序员并非一件容易的事,它需要程序员在技术、团队协作、个人态度等多个方面持续修炼。《高效程序员的45个习惯 敏捷开发修炼之道》不仅是一本指导书籍,更是引导程序员不断...
总的来说,这个“程序员助手解密版”是一个全面的工具集合,旨在提供一站式服务,满足程序员在编码、学习、资源查找等方面的需求。它通过整合各种实用工具和资源,大大简化了程序员的工作流程,提升了他们的生产力。
手册中涵盖了编码规范、代码格式、命名规则、安全生产信息化管理系统等方面的内容。 1. 目的 手册的主要目的是为了方便代码的交流和维护,不影响编码的效率,不与大众习惯冲突,使代码更美观、阅读更方便,使代码...