阅读更多

4顶
0踩

研发管理

转载新闻 程序员需要谨记的九大安全编码规则

2012-03-31 14:50 by 正式编辑 nemohq 评论(1) 有3668人浏览
历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或清除其中的漏洞。

下面列举的这些方法会有助于开发人员提高编码的安全性:

一、注意编译器警告

程序员应当使用编译器的最高警告等级。在编译过程中,应当修改程序中的错误,直到警告解除。应当使用静态和动态的分析工具来检测和清除安全缺陷。

二、根据安全策略设置软件架构

设计者应创建一个软件架构,并在设计软件的过程中实施和强化安全策略。例如,如果你的系统在不同的时间要求不同的特权,就不妨考虑将系统分解成能够互联通信的不同的子系统,每一个系统都有自己适当的特权。这种“分而治之”的方法可以有效地提高应用程序的安全性。

三、验证输入

程序设计者在设计程序时必须验证来自所有不可信数据源的输入。适当的输入验证可以清除多数软件漏洞。在设计程序时,必须对多数外部的数据源抱着怀疑的态度,其中包括命令行参数、网络接口、环境变量、用户控制的文件等。

四、保持程序简单

设计者要尽量使程序短小精悍。复杂的设计会增加实施、配置、使用过程中出现错误的可能性。程序越复杂,就需要越多的复杂的安全控制,企业需要付出的努力也就会越多。

五、拒绝默认访问

访问决策的制定应当根据许可权限而不是根据其它的任何方面。这意味着,默认情况下,应当拒绝访问,程序的保护机制应当根据“允许谁访问”来确认访问条件。

六、遵循最小特权原则

程序的每个处理过程在执行时,都应当仅使用为完成其工作而需要的最小特权。任何提升的许可权限都要尽量持续最短的时间。这种方法可以减少攻击者用提升的特权执行任意代码的可能性。

七、“净化”传送给其它系统的数据

所谓“净化”是指从用户输入的数据中清除恶意数据,如清除用户提交表单时的恶意的或错误的字符。

程序设计者必须对传送到复杂的子系统(如命令外壳、关系型数据库、购买的商业软件组件)的所有数据进行“净化”。攻击者有可能通过使用SQL注入命令或其它注入攻击来调用这些组件中没有被使用的功能。这未必是输入验证问题,因为被调用的复杂的子系统并不理解调用过程中的前后关系。由于调用程序理解前后关系,所以我们要在调用子系统之前对数据进行“净化”。

八、实施深度防御

程序设计必须能够利用多种防御策略来管理风险。只有这样,才能在一层防御不够用或失效时,另外一层防御可以防止将安全设计上的缺陷变成可被利用的漏洞,从而可以限制攻击者利用漏洞的后果。例如,将安全编程技术与安全运行环境结合起来,可以减少在部署阶段残存在代码中的漏洞被攻击者在操作环境中利用的可能性。

九、使用有效的质量保证技术

良好的质量保证技术可以有效地确认和清除漏洞。模糊测试、渗透测试、源代码审计等都可以结合起来使用,以此作为一个有效的质量保证项目的一部分。独立的安全检查可以使系统更安全。有资质的外部审查人员可以提供独立的观点,例如,外部人员有助于确认和纠正一些错误的设想。

当然,为保证代码的安全,企业应当为开发语言和平台制定并实施一套健全的编码标准。
4
0
评论 共 1 条 请登录后发表评论
1 楼 fortunately321 2012-04-06 15:09
[flash=200,200][/flash]

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 怎样成为一个优秀的架构师?

    架构师不是一个人,他需要建立高效卓越的体系,带领团队去攻城略地,在规定的时间内完成项目。 架构师的分类 从业界来看对于架构师的理解可以大概区分为: 企业架构师:专注于企业总体 IT 架构的设计。 IT...

  • 如何做一个软件项目经理? ----写给公司所有的开发人员

    如何做一个软件项目经理?----写给公司所有的开发人员

  • 人工智能下一个前沿:可解释性

    不确定性是AI的一个特征,而不是一个bug。 十亿美元的问题 50多年来,计算机已成为我们生活的一部分。他们开始时只是大公司使用的这些巨大的装置,他们最新的迭代是我们口袋里的小巧智能手机。 在我们与...

  • 前端基础知识点-每天一个基本知识点(100+个前端小知识,你是否都知道?)

    文章目录前言第一回合一、知识点:cookie(21/09/06)二、知识点:节流和防抖(21/09/07)三、知识点:var和let以及const(21/09/08)四:知识点:深拷贝和浅拷贝(21/09/09)五、知识点:作用域和作用域联(21/09/...

  • 超硬核!小白读了这篇文章,就能在算法圈混了

    作为一只超级硬核的兔子,从来不给你说废话,只有最有用的干货!这些神级算法送给你 目录 第一节 1.1bogo排序 1.2位运算 1.3打擂台 1.4morris遍历 第二节 2.1睡眠排序 2.2会死的兔子 2.3矩阵快速幂...

  • 一个博士生接受怎样的训练是完整、全面的科研训练?

    我粗算了一下对机器学习(偏理论和方法论 不偏工程)大概30个技能点吧(可能增加)每个点我分成 高中初 三个级别 即总共90分 为了方便理解 默认本科毕业送基础分...刚开学遇到了我现在的导师 开始了第一个线性模型项目

  • 新手如何用QT做一个“动漫宠物“?进来学!!!!

    好久不见,又是这样的深夜,也算是忙里偷闲,分享下...我就是在平常写代码的时候,想出来的这样一个灵感,我--------为什么不能写一个程序来陪我一起呢?于是我想起来了小时候的时光,那个时候还喜欢玩QQ农场,QQ宠物,

  • 一个小公司老板的日常管理,希望能让创业的朋友学到东西

    1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发工资 10.学会说“不” 11.不要在公司内部...

  • 【学术】 一个博士的经历(小木虫精华帖,留着细细体会!)

    你今天踏踏实实工作一天有什么收获不重要,但是你必须要认真工作,因为一旦放弃了,你就会养成放弃时间的习惯。======================================================================第一季 被博士2005

  • 如果你的下属不服从你得管理,你会怎么办?

    前两天遇到了老同事的一个针对下属不服管的现实问题,具体如下: 1、17人的团队,组织扁平,管理者劳神劳力、疲于应付 2、员工背地拉小群专项吐槽,各种负能量 3、费劲全力培养,员工不感恩 4、反对派多,使劲...

  • 一个小公司老板的日常管理,希望能让创业的朋友学到东西【收藏】

    1. 小公司如何留住骨干:  2.关于授权  3.有的钱不能省  5.关于招聘  6.老板尽量唱红脸  7.公司里的亲戚  8.当老板和开车  9.按时发工资  10.学会说“不”  11.不要在公司内部奢望交朋友  12....

  • 一个小兔子的大数据见解1

     刚去公司的时候,做数据的迁移,写sqoop脚本,(注意:这里可能会问到sqoop增量导入数据的方式式,一般会用到append追加的模式)把数据从oracle数据库导入到hive当中(注意:  a.这里我们使用是shell脚本的方式...

  • 作为一个新手程序员该如何成长?

    解这一点能在精神领域帮助你觉得坦然,而且还能帮助你认识到,每一个做过值得夸耀的人,曾几何时的想法就和你现在一样。 这种心态可以帮助你坚持下来!如果再加上具有建设性的渠道方法——学习新的语言、...

  • 数本管理学书籍小结

    管理学总结 ...人是拥有趋利避害天性的,所以管理就是管理人性如在分配任务时,员工自然希望任务的完成时间越长越好,这就意味着企业的成本增加了......即员工的计划驱动变更为价值驱动。 员工为什么要

  • 科普文章-另一个视角解读计算机编码(修订版)

    我不知道本文该作为原创发布还是作为转载发布,因为本文是《另一个视角解读计算机编码-补码编码》的“排版后的版本”,内容几乎没有变,除了增加了一系列的图解。 后来想了下,还是作为原创吧,毕竟《另一个视角...

  • 做一个合格的程序员需要具备哪些素质?

    程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大 的贡献. 中国有很多精于编码的人.但是中国软件行业.尤其是网络应用开发方面误区很大.很难形成有规模的软件开发力量和产品能力.不但比美国差距甚远

  • 痛与教训,我所亲历的3个失败游戏创业公司

    上周五,一个旧时创业公司的同事跟我说,他现在,患有恶性高血压、肾衰竭五期、肾纤维化,身体每况越下,这些,都是那时候在创业公司烙下的病根,接着还跟我吐槽了那时候创业公司的上司,多么的好吃懒做,推卸工作...

  • 煤矿水PH值的测定方法.pdf

    煤矿水PH值的测定方法.pdf

  • node-v6.14.3-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics