声明

本文是学习GB-T 38674-2020 信息安全技术 应用软件安全编程指南. 下载地址 http://github5.com/view/624而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们

应用软件安全编程代码实现安全

面向对象程序安全

面向对象程序的设计和开发需从以下方面提升软件的安全性,包括但不限于:

  1. 子类对基类的扩展应从以下角度进行安全控制:
  2. 对基类的扩展,必须保持由基类提供的不变性。
  3. 对于关键基类仅允许受信任的子类进行扩展。

注:不变性是指在程序运行的特定段或一规定点被认为是真(true)的属性。

  1. 修改基类时,必须保证基类中的修改不触动其子类所依赖的程序不变性。
  2. 对类的数据成员进行访问控制:
  3. 数据成员必须声明为私有。
  4. 当类成员需要在声明该类的包以外被访问时,使用暴露类成员的封装器方法监视并控制对数据成员的修改。
  5. 避免混用泛型和非泛型的数据类型。如为了兼容遗留代码而混用泛型和非泛型数据类型,需警惕堆污染。
  6. 为可变类实现防御性复制功能,该功能可创建可变类实例的副本,通过此功能允许将可变类实例传递给非受信代码。
  7. 应禁止返回类的私有可变成员的引用。可返回一个指向内部可变成员的防御性副本的引用,从而保护内部状态不会被非预期地修改。
  8. 对可变变量(或可变的内部对象)创建防御性副本:
  9. 如果程序逻辑依赖可变变量,应警惕竞态攻击。可变变量的特点在于它的数值会发生变化,多次访问该变量会得到不同的值。如果程序逻辑对可变变量进行验证和安全检查后,该变量的值被篡改,就会发生Time-of-Check Time-of-Use(TOCTOU)漏洞。
  10. 在需要访问可变变量(或可变的内部对象)时,可使用返回可变变量(或可变的内部对象)的封装器方法来实现。
  11. 禁止复制或者序列化包含秘密或者其他敏感数据的类。
  12. 那些不敏感但是需要维持其他不变性的类,必须对恶意子类访问或者操作它们的数据及破坏其不可变性的可能性做出防御。
  13. 应禁止嵌套类将其所依附的外部类的私有成员暴露给其他外部的类或者包。
  14. 当判定一个对象是否属于特定的类,或两个对象的类是否相同时,应比较类对象,不能仅基于类名称进行判定。
  15. 谨慎处理构造函数抛出异常的情况。在一个构造方法开始创建对象但并未结束时,对象会被部分地初始化。只要对象没有被完全初始化,就必须对其他类不可见。
  16. 应避免将不可序列化的对象存储到磁盘。

相关的规范和不规范的代码示例参见附录A.3.1。

并发程序安全

并发程序设计和开发需从以下方面提升软件的安全性,包括但不限于:

  1. 确保共享数据的线程安全:
  2. 确保所有的全局变量、线程间的共享可变数据是线程安全的。
  3. 对所有需确保线程安全的数据通过同步方法或代码块进行保护。
  4. 确保共享变量、数据的可见性:
  5. 对共享变量、数据的读或写操作均应使用同步访问。
  6. 所有执行读或写操作的线程都必须在同一个锁上同步,以确保所有线程都能看到共享变量或数据的最新值。
  7. 确保同步对象上的锁按相同的顺序获得和释放,以避免当两个或多个线程互相等待时被阻塞进而发生死锁。
  8. 需确保能够终止处于阻塞状态的任务和线程。
  9. 对锁实行严格的访问控制,避免锁被不可信的外部实体影响或控制。
  10. 确保线程池安全:
  11. 使用线程池来处理请求,以抵御拒绝服务攻击。
  12. 禁止在一个有限的线程池中执行需要依赖其他线程的任务,以避免死锁。
  13. 提交至线程池的任务应是可被中断的。
  14. 所有线程池中的任务应提供将任务执行的异常情况通报应用程序的机制。
  15. 应及时释放线程专有对象,防止内存泄漏与拒绝服务式攻击。
  16. 注意共享对象的存储周期,禁止在一个线程中访问其他线程的非静态局部变量。
  17. 仅在循环体中执行线程的挂起操作,并在每次挂起线程之前检查线程继续执行要满足的条件。
  18. 不要加入或分离已进行过加入或分离操作的线程。
  19. 谨慎处理原子变量。禁止在一个表达式中两次访问同一个原子变量。程序无法确保在两次访问该变量之间,其值不被其他线程修改。
  20. 进行特权让渡时,应遵守正确的特权废除顺序,确保特权让渡过程成功。
  21. 不要使用异步取消的线程,防止产生资源泄露。
  22. 不要在条件变量同步等待操作中使用多于一个的互斥条件。
  23. 释放互斥锁时,建议线程通知所有正在等待该锁的线程,而不是单一线程。
  24. 在多线程环境下,应确保应用的不同会话之间不会发生信息泄露。

相关的规范和不规范的代码示例参见附录A.3.2。

函数调用安全

应用软件应从如下方面保障函数调用安全,包括但不限于:

  1. 函数应对传入的参数进行合法性、安全性验证,包括但不限于对参数数量、顺序、类型、值的验证。
  2. 函数应能正确并安全的处理传入参数的数量、顺序、类型、值不满足预期的情况。
  3. 函数应谨慎处理来自不可信数据源的格式化字符串,避免直接用于构造命令。
  4. 宜检查函数的返回值是否符合预期,避免忽略函数的返回值。
  5. 避免在函数中返回栈变量地址。
  6. 应避免在应用程序编程接口(API)或与外部交互的接口中暴露那些原本设计为仅限内部或部分用户访问的危险方法或函数,否则可能会导致非授权访问攻击。
  7. 应避免使用在不同版本具有不一致实现的函数或方法。

相关的规范和不规范的代码示例参见附录A.3.3。

异常处理安全

应用软件应建立完善的异常和错误处理机制,确保异常与错误可以被及时识别并处理。应从以下方面提升异常和错误处理的安全性,包括但不限于:

  1. 软件应自行处理程序错误,并且不依赖于服务器配置。
  2. 避免在越过执行边界时抛出异常。
  3. 避免在静态对象的构造器和线程存储周期内抛出异常。
  4. 异常处理时应保持数据的状态一致性。
  5. 异常处理时应及时回收并释放系统资源。
  6. 精确捕获异常,并对捕获的异常进行恰当的处理,避免在捕获异常后不做任何处理。
  7. 不在软件执行异常时暴露敏感信息:
  8. 向用户展示通用的错误提示信息。
  9. 在系统发生异常状况时禁止向用户暴露的敏感信息包括但不限于:系统的详细信息、会话标识符、账号信息、调试或堆栈跟踪信息。

相关的规范和不规范的代码示例参见附录A.3.4。

指针安全

程序的设计和开发有关指针的操作需从以下方面提升软件的安全性,包括但不限于:

  1. 在使用指针的过程中,应确保指针的有效性。
  2. 确保指针类型的正确使用:
  3. 明确指针类型的兼容性。
  4. 不应将非结构体类型指针强制转换为指向结构类型。
  5. 确保正确地使用指针运算:
  6. 不要在非数组对象的指针上执行指针运算。
  7. 避免使用指针的加减法来确定内存大小。
  8. 避免将固定地址赋值给指针。
  9. 指针使用时应防止偏移越界。

相关的规范和不规范的代码示例参见附录A.3.5。

代码生成安全

程序的源代码编写完成后,在编译以及链接过程中,应当从以下几方面保证安全性,包括但不限于:

  1. 对编译所依赖的库的使用应当首先进行版本判断。
  2. 对某些重要的库(比如加密、通信等)应当进行哈希校验。
  3. 编译命令中的宏定义不能存在冲突。
  4. 针对同一个工程的编译,Release/Debug设置应当统一。
  5. 不要通过makefile参数直接配置宏名,应当以可选的选项形式提供。
  6. 不要通过编译参数配置软件的版本信息。
  7. 引用头文件的路径不能直接开放。
  8. 引用头文件的路径中,不能有存在歧义的头文件路径。
  9. 同一个工程中,不同的编译过程如果使用了同一个库的不同版本,应当有明确的注释或提示说明。
  10. 如果编译的源代码来自不同的代码仓库,应当配置统一的版本、分支控制脚本。
  11. 编译生成的结果文件(.o文件、.obj文件)应当保存在独立于源代码的路径中。
  12. 谨慎使用编译过程中自动生成的源代码。

延伸阅读

更多内容 可以点击下载 GB-T 38674-2020 信息安全技术 应用软件安全编程指南. http://github5.com/view/624进一步学习

联系我们

DB46-T 482-2019 水质 甲基叔丁基醚的测定 吹扫捕集 气相色谱-质谱法 海南省.pdf

信息安全技术 应用软件安全编程指南相关推荐

  1. 《应用软件安全编程指南》国标发布 奇安信代码卫士已全面支持

     聚焦源代码安全,网罗国内外最新资讯! 近日,国家市场监督管理总局.国家标准化管理委员会发布了中华人民共和国国家标准公告(2020年第8号),其中包括全国信息安全标准化技术委员会归口的26项国家标准. ...

  2. 《信息安全技术 云计算服务安全指南》国家标准意见稿

    来源:专知 本文约1200字,建议阅读7分钟本标准可以为政府部门采用云计算服务,特别是采用社会化的云计算服务提供全生命周期的安全指导. <信息安全技术 云计算服务安全指南>国家标准意见稿, ...

  3. 信息安全技术:健康医疗数据安全指南思维导图

    <数据安全法>的出台使我国在保护数据安全方面更上一个台阶,同时随着新冠疫情全球蔓延,鉴于我国在抗疫过程中取得了令人瞩目的成绩,国外一些黑客组织不断攻击我国医疗机构,欲获取抗疫数据及健康医疗 ...

  4. 应用软件安全编程概述

    声明 本文是学习GB-T 38674-2020 信息安全技术 应用软件安全编程指南. 下载地址 http://github5.com/view/624而整理的学习笔记,分享出来希望更多人受益,如果存在 ...

  5. 应用软件安全编程资源使用安全

    声明 本文是学习GB-T 38674-2020 信息安全技术 应用软件安全编程指南. 下载地址 http://github5.com/view/624而整理的学习笔记,分享出来希望更多人受益,如果存在 ...

  6. 应用软件安全编程代码实现安全

    声明 本文是学习GB-T 38674-2020 信息安全技术 应用软件安全编程指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 应用软件安全编程代码实现安全 面向对象程序安 ...

  7. 信息安全技术 个人信息安全影响评估指南

    声明 本文是学习GB-T 39335-2020 信息安全技术 个人信息安全影响评估指南. 下载地址 http://github5.com/view/788而整理的学习笔记,分享出来希望更多人受益,如果 ...

  8. iPhone OS编程指南(一)

    原文地址:iPhone OS编程指南(一)作者:若水一叶 介绍 请注意:本文档之前命名为iPhone OS编程指南. iPhoneSDK为创建iPhone的本地应用程序提供必需的工具和资源.在用户的H ...

  9. 信息安全技术 云计算安全参考架构

    声明 本文是学习GB-T 35279-2017 信息安全技术 云计算安全参考架构. 下载地址 http://github5.com/view/594而整理的学习笔记,分享出来希望更多人受益,如果存在侵 ...

最新文章

  1. 浮层java_通过遮罩层实现浮层DIV登录的js代码
  2. Jenkins使用遇到的问题总结
  3. TOA定位算法的FPGA实现
  4. mysql switch binlog_如何使用 Golang 处理 MySQL 的 binlog
  5. Spring常见面试题(13个面试题,回答超详细)
  6. MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
  7. leetcode 387. 字符串中的第一个唯一字符(hash)
  8. python中res代表什么_在下面的代码中,zip(*res)在python中是什么意思?
  9. hb编程软件全称_什么是组态软件、组态编程?
  10. Java序列化后isXXX变量没有了
  11. AIR Android开发--APK结构详解
  12. 轻文章-使用URL Rewrite实现网站伪静态
  13. 论基于架构的软件设计方法及应用
  14. JN5169 Bootload 烧录过程和DIY烧录程序(一)
  15. 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片
  16. 不同浏览器的使用体会
  17. 鼠标自动不停地按右键
  18. 如何在微信直接下载app?
  19. 学习笔记:Oracle函数大全
  20. caffe安装:./include/caffe/util/device_alternate.hpp:34:23: fatal error: cublas_v2.h: 没有那个文件或目录

热门文章

  1. Win 10 任务栏中Google开启时出现两个Google图标
  2. canvas 实现流星雨特效
  3. 这4款风格各异的电脑软件,免费又实用,后悔没早点知道
  4. C#_CRC-16/CCITT-FALSE计算加判断
  5. 百度地图转高德地图(火星坐标)高德地图(火星坐标)转百度地图
  6. python怎么变大字体_pycharm字体放大缩小设置
  7. webrtc的WHIP实现
  8. AirPods Pro好在哪
  9. 基于Vue开发的电商APP项目——蘑菇街app
  10. 心态-《积极的力量》书中的精髓:如何保持积极乐观的心态,从而提升我们的幸福感?