历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或清除其中的漏洞。

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

一、注意编译器警告

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

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

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

三、验证输入

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

四、保持程序简单

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

五、拒绝默认访问

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

六、遵循最小特权原则

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

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

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

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

八、实施深度防御

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

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

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

当然,为保证代码的安全,企业应当为开发语言和平台制定并实施一套健全的编码标准。

转载自伯乐在线 http://blog.jobbole.com/16529/

已有 0 人发表留言,猛击->>这里<<-参与讨论

转载于:https://www.cnblogs.com/mixer/archive/2012/04/04/2448372.html

程序员需要谨记的9个安全编码规则【转载】相关推荐

  1. 程序员需要谨记的九大安全编码规则

    历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首.安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞.软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或 ...

  2. 2019你好想跳槽了?程序员们谨记:哪里都不好混!

    朋友忽然有一天问出这个让你为难的问题:我想跳槽去干嘛干嘛,你觉得怎么样?举个极端点的例子,老曹一个学生的妈妈,专业换工作四十年,还是跨度特别大的跳槽,比如关了生意不好做的小书店,转而去考了导游证,当了 ...

  3. 程序员小强转行记#0002

    [程序员小强转行记#0002]这是一个系列,从今天开始每日更新500到1000字左右.小强是我本人,又不是,过去很多年,很多记忆会模糊,同时这个人会加入我看到的听到的,身边的,身外的其他人的一些影子, ...

  4. 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?

    最近,有很多朋友让我帮忙整理一下程序员有哪些常用又好用的编码小工具.今天,小编就整理一下哦,希望大家一起学习,一起进步! 1. Notepad++ Notepad++中文版是一款非常有特色的编辑器,是 ...

  5. 程序员如何优雅记笔记(Wiki、Typora、Markdown、坚果云)

    编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 导读 一个好的笔记不仅能记录我们工作中的点滴,也能很方便 ...

  6. 2023 年对程序员英语学习记单词很有帮助的网站

    对于初学编程的程序员,英语是绕不过去的一个坎,一门新的语言或框架,都只有英文学习资料,开发中遇到问题,用 Google 英文搜索也是能最快找到解决办法的,单词词汇量决定在看这些英文资料的是否吃力,而记 ...

  7. 程序员养娃记:撸一手好代码,却带不好一个娃?!

    1  杂 谈:吾当感恩  9 月 10 日是一个感恩的节日--教师节.就在这个感恩的日子里,<西游记>剧照可谓是刷爆了朋友圈(不过,确实很应景). 图中展示菩提祖师和孙悟空分别时的情境,完 ...

  8. c++黑马程序员用的是什么软件打开.md_程序员如何优雅记笔记(wiki+typora(markdown)+坚果云)

    声明:转载请注明出处 提示:本文最适合程序员,当然其它职业也可使用 为什么要写这篇文章: 作为一名程序员,可能每天都要接受一些新技术或者多过往项目及经验进行总结,此时,一个合适的笔记是必不可少的.好比 ...

  9. 我是如何在12周内由零基础成为一名程序员的——谨以此文激励自己!!!

    我的故事 在海军陆战队服役超过10年后,我于去年7月份退役了.随后在8月份找到了一份赌场的工作做公关,到今年2月中旬的时候又被辞退了.到5月中旬的时候我在DE协会找到了一份临时的"初级用户体 ...

最新文章

  1. Nature:大脑佛一点,活得久一点,这是哈佛医学院的最新研究
  2. supersu二进制更新安装失败_helm安装教程
  3. ajax创建对象,ajax创建对象
  4. jQuery 的常用选择器,筛选器
  5. C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程
  6. (0.2)linux下Mysql的安装配置与管理入门(目录篇)
  7. python include_Python如何嵌入C/C++进行开发
  8. 解决.bashrc文件每次打开终端都需要source的问题
  9. sql loader
  10. Python之快捷键
  11. Eclipse菜单栏翻译
  12. java.net.ConnectException: no available server
  13. 腾讯云与本地主机socket通信网络问题
  14. 万豪又双叒叕翻车,520 万人隐私遭曝光
  15. php图片不显示怎么处理,如何解决php图片因存在错误而无法显示
  16. matlab显示图像全黑,请教!彩色图像显示出来怎么是全黑的?
  17. 勒索病毒SARA,请勿用于非法用途。
  18. 两级分销加两级代理佣金计算工具
  19. Win10我的电脑图标怎么调出来?1分钟解决!
  20. c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)

热门文章

  1. personal-index 我的个人主页的介绍
  2. linux centos6.5 网络配置
  3. 守护线程与非守护线程的区别
  4. python file operations
  5. 各排序算法的C++实现与性能测试(转)
  6. LDAPit's usage
  7. hyper-v NAT网络
  8. 高可用集群中的选举机制
  9. 微信小程序组件化 快速实现可用模态窗
  10. Elasticsearch 5.3.x 使用 Head 插件