犐犆犛犔中华人民共和国国家标准犌犅犜信息安全技术应用软件安全编程指南犐狀犳狅狉犿犪狋犻狅狀狊犲犮狌狉犻狋狔狋犲犮犺狀狅犾狅犵狔犌狌犻犱犲犾犻狀犲狅狀狊犲犮狌狉犲犮狅犱犻狀犵狅犳犪狆狆犾犻犮犪狋犻狅狀狊狅犳狋狑犪狉犲发布实施国家市场监督管理总局国家标准化管理委员会发布犌犅犜目次前言范围规范性引用文件术语和定义缩略语术语和定义缩略语概述安全功能实现数据清洗数据加密与保护访问控制日志安全代码实现安全面向对象程序安全并发程序安全函数调用安全异常处理安全指针安全代码生成安全资源使用安全资源管理内存管理数据库管理文件管理网络传输环境安全第三方软件使用安全开发环境安全运行环境安全附录资料性附录代码示例概述安全功能实现代码实现安全资源使用安全环境安全参考文献犌犅犜前言本标准按照给出的规则起草请注意本文件的某些内容可能涉及专利本文件的发布机构不承担识别这些专利的责任本标准由全国信息安全标准化技术委员会提出并归口本标准起草单位国家计算机网络应急技术处理协调中心北京邮电大学北京奇虎测腾安全技术有限公司中国电力科学研究院有限公司上海计算机软件技术开发中心海通证券股份有限公司北京银行股份有限公司信息安全共性技术国家工程研究中心本标准主要起草人舒敏王博吴倩王文磊黄元飞张家旺林星辰陈禹王鹏翩李燕伟高强杨鹏陈亮范乐君张晓娜杜薇夏剑锋李晔张淼徐国爱郭燕慧李祺杨昕雨王晨宇葛慧晗黄永刚韩建章磊王彦杰胡建勋李凌犌犅犜信息安全技术应用软件安全编程指南范围本标准提出了应用软件安全编程的通用框架从提升软件安全性的角度对应用软件编程过程进行指导本标准适用于客户端服务器架构的应用软件开发其他架构的应用软件开发也可参照使用并根据其应用环境的特性补充必要的安全防护措施规范性引用文件下列文件对于本文件的应用是必不可少的凡是注日期的引用文件仅注日期的版本适用于本文件凡是不注日期的引用文件其最新版本包括所有的修改单适用于本文件信息安全技术术语术语和定义缩略语术语和定义界定的以及下列术语和定义适用于本文件为了便于使用以下重复列出了中的某些术语和定义缓冲区溢出犫狌犳犳犲狉狅狏犲狉犳犾狅狑向程序的缓冲区写入超出其长度的内容从而破坏程序堆栈使程序转而执行其他指令以获取程序或系统的控制权命令注入犮狅犿犿犪狀犱犻狀犼犲犮狋犻狅狀通过应用程序将用户输入的恶意内容拼接到命令中并提交给后台引擎执行的攻击行为应用软件日志犪狆狆犾犻犮犪狋犻狅狀狊狅犳狋狑犪狉犲犾狅犵用于记录系统操作事件的文件集合线程安全狋犺狉犲犪犱狊犪犳犲某个函数函数库在多线程环境中被调用时能够正确地处理多个线程之间的共享变量使程序功能正确执行的能力线程同步狋犺狉犲犪犱狊狔狀犮犺狉狅狀犻狕犪狋犻狅狀多个线程通过特定手段来控制线程之间执行顺序的一种机制注当有一个线程在对内存进行操作时其他线程就不能对该内存地址执行操作直到该线程操作完成此时其他线程被设置处于等待状态犌犅犜死锁犱犲犪犱犾狅犮犽两个或两个以上的进程在执行过程中因竞争资源或彼此通信而造成的一种阻塞现象阻塞犫犾狅犮犽进程线程暂停执行过程等待请求被应答的状态游标犮狌狉狊狅狉一种用于操纵数据库查询返回的多行结果集的机制敏感数据狊犲狀狊犻狋犻狏犲犱犪狋犪必须受保护的其泄露修改破坏或丢失会对人或事产生可预知的损害的信息注常见的敏感数据包括但不限于身份鉴别数据会话标识符口令连接字符串等秘密数据狊犲犮狉犲狋犱犪狋犪为了执行特定安全功能策略只能由授权用户或被评对象安全功能知晓的信息添加变量狊犪犾狋作为单向函数或加密函数的二次输入而加入的随机变量可用于导出口令验证数据定义信任边界狋狉狌狊狋犫狅狌狀犱犪狉狔由编程人员直接控制的系统部件组成线程挂起狋犺狉犲犪犱狊狌狊狆犲狀狊犻狅狀暂停线程运行的操作注在线程挂起后可以通过重新唤醒线程使之恢复运行异常犲狓犮犲狆狋犻狅狀导致程序中断运行的一种指令流注如果不对异常进行正确的处理则可能导致程序的中断执行错误犲狉狉狅狉系统运行中出现的可能导致系统崩溃或者暂停运行的非预期问题硬编码犺犪狉犱犮狅犱犲在编码过程中将可变变量用一个固定数值表示封装犲狀犮犪狆狊狌犾犪狋犻狅狀将系统功能一组数据和在这些数据上的操作隔离在一个模块中并为该模块提供精确的规格说明的软件开发技术犌犅犜泛型犵犲狀犲狉犻犮狋狔狆犲程序设计语言的一种特性注通过引入参数化数据类型允许程序员在强类型程序设计语言中定义类型时包含一些可变部分这些部分在使用前应作出指明堆污染犺犲犪狆狆狅犾犾狌狋犻狅狀当将一个参数化的数据类型指向一个对象而该对象不是参数化数据类型或不是同类型的参数化数据类型时会产生堆污染嵌套类狀犲狊狋犲犱犮犾犪狊狊声明在另一个类或接口代码块中的任意类并发程序犮狅狀犮狌狉狉犲狀狋狆狉狅犵狉犪犿可通过多进程多线程机制实现的允许在同一时间段执行多个程序模块的机制缩略语下列缩略语适用于本文件应用程序编程接口域名系统文件传输协议超级文本传输协议互联网消息访问协议轻量目录访问协议邮局协议结构化查询语言安全套接子层传输层安全统一资源定位符针对的可变长度字符编码可扩展置标语言概述本标准从程序安全和环境安全两个方面提出了提升应用软件安全性的编程最佳实践其中程序安全部分描述软件在资源使用代码实现安全功能方面的安全技术规范环境安全部分描述软件的安全管理配置规范图给出了应用软件编程安全框架犌犅犜图应用软件编程安全框架安全功能实现数据清洗输入验证应用软件需确保对所有输入到应用的数据进行验证拒绝接受验证失败的数据在设计和实现数据验证功能时需重点关注以下方面内容包括但不限于验证所有输入数据的安全性包括但不限于检测输入数据的数据类型检测输入数据的长度验证允许输入的最小和最大长度检测输入数据的值包括进行最小值最大值边界值检查验证文件的安全性见特别关注如下场景的数据验证验证来自请求中的所有数据恶意数据可以从表单域参数头以及自身传入验证来自重定向输入的数据攻击者可能向重定向的目标直接提交恶意代码从而避开应用程序逻辑以及在重定向前执行的验证所以对重定向输入数据需再次验证对来自命令行环境以及配置文件的输入进行校验对发送给文件系统浏览器数据库或者其他系统的命令进行验证防止采用不可信来源的数据构建命令对重要业务操作相关的输入数据验证数据的真实性和完整性宜验证数据发送方的数字签名以确认数据发送方的身份对输入的数据进行过滤或标准化处理然后进行验证犌犅犜禁止试图对验证失败的数据进行修复自动错误恢复代码很可能改变请求的初始意图或者截断验证逻辑在可信任环境中执行输入验证集中输入验证把输入验证作为软件框架的一部分为应用程序提供一个统一的输入验证策略为所有输入明确恰当的字符集例如确定系统是否支持扩展字符集如果支持在解码完成以后进行输入验证在程序中定义清晰的信任边界将可信和不可信数据比如数据库文件流分别存储当数据要从不可信的一侧传输到可信一侧的时候使用验证逻辑进行判断相关的规范和不规范的代码示例参见附录的输出净化应用软件需对所有输出到客户端的来自于应用程序信任边界之外的数据进行净化应用软件在设计和实现输出净化功能时需重点关注以下方面内容包括但不限于除非明确对目标编译器是安全的否则对所有字符进行编码在可信任环境中执行输出编码以国际国家行业标准为基础结合实际情况制定编码规则关注和查询语句以及操作系统命令这些命令可能存在潜在的危险字符需进行语义净化禁止将重定向到用户可控的不可信站点相关的规范和不规范的代码示例参见数据加密与保护数据加密应用软件应对敏感数据进行加密数据加密的设计和实现需关注以下方面内容包括但不限于凡涉及采用密码技术解决保密性完整性真实性不可否认性需求的应遵循国家有关法律法规即使在服务器端仍然要加密存储敏感数据在可信任环境中执行数据的加密过程确保密码运算过程安全基于指定的算法和特定长度的密钥来进行密码运算安全地处理加密模块的失败操作如果加密模块加密失败或报错需重新加密按照用途尽量减少需要保存的秘密信息建立并使用相关的安全策略和流程以实现加解密的密钥管理使用安全的随机数生成器采用能产生充分信息熵的算法或方案避免将具有密码学弱点的伪随机数生成器用于加密场景使用密码学的伪随机数生成器时使用信息熵最大的信息作为密码学伪随机数生成器的种子如果信息熵不可用可使用变化的种子来降低安全威胁避免使用可预测的种子如进程或系统时间的当前值或空间太小的种子维护密钥的安全规定安全的密钥强度仅使用高于规定强度的密钥犌犅犜规定密钥有效期禁止使用已经过期的密钥禁止使用硬编码密钥硬编码密钥将显著增加加密数据被攻击者破解的可能性相关的规范和不规范的代码示例参见数据保护应用软件需要注意从以下方面保护数据的安全包括但不限于明确应用软件中的敏感数据隐私数据的范围以及有权访问这些数据的用户范围在软件中明确划定信任边界禁止敏感数据跨越信任边界对数据的授权访问遵循最小权限原则按照的内容对敏感数据进行加密存储和传输对重要数据进行完整性检查尽量缩短敏感数据的存储时间并减少敏感数据的存储地点以降低敏感数据泄露的风险避免在错误消息进程信息调试信息日志文件源代码或注释中包含敏感数据在设计登录表单的时候可考虑禁止浏览器的口令自动填充功能在资源释放前清理敏感数据保护所有在服务器上缓存的或临时拷贝的敏感数据并在不需要时尽快清除禁止在客户端保存敏感数据当敏感数据丢失或破坏时确保可通过备份数据进行数据恢复在将数据发送到客户端的时候基于任何通过客户端共享的数据都是不安全的假设对数据进行操作相关的规范和不规范的代码示例参见访问控制身份鉴别身份鉴别的设计和实现需注意以下方面内容包括但不限于建立并使用标准的已通过测试的身份鉴别策略根据业务安全要求选择身份鉴别方式安全性要求高的系统建议采用多因素身份鉴别方式为所有身份鉴别使用一个集中实现的方法包括利用库文件请求外部身份鉴别服务所有的身份鉴别过程应在可信任环境中执行且在每次用户登录时进行身份鉴别避免仅在客户端而非服务器端执行身份鉴别最小化角色授权一个账号对应一个人而不是一个组使用软件的每个人拥有唯一的用户名在进行关键的安全操作时避免依赖不可靠信息进行身份鉴别避免信任中的数据避免依赖反向解析获取的主机信息验证数字证书应检查证书的状态和证书持有者只有有效的未过期的且证书的实际持有者与证书中声明的持有者一致的证书才能被信任和使用避免鉴别过程被绕过严格控制用户访问系统的可选途径或通道保证用户只能通过指定的途径或通道访问系统避免身份鉴别被绕过使用安全的鉴别算法且算法的关键步骤没有被省略或跳过避免在处理身份鉴别的过程中透露多余信息犌犅犜处理每个认证请求所花费的时间相同避免攻击者根据登录尝试失败的时间来判断登录尝试是否成功安全地处理未成功的认证认证和注册的错误信息不能包含可被攻击者利用的信息例如判断一个特定的用户名是否有效的信息确保鉴别反馈的内容中不包含敏感数据对鉴别尝试的频率进行限制连续多次登录失败强制锁定账户限制同一个账号能够进行鉴别尝试的频率和次数设定用户登录失败次数的阈值在用户登录失败次数达到阈值
GB-T 38674-2020 信息安全技术 应用软件安全编程指南
文档预览
中文文档
134 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共134页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 路人甲 于 2022-05-24 14:32:00上传分享