年月安全编码规范快速参考指南版权与许可版权所有年基金会本文档基于发布任何重用或发行都必须向他人明确该文档的许可条款中文版本团队成员王颉何勇亮林恒辉欢迎大家指正翻译错误我们将在以后的版本中修正指出的错误中文版年月目录序言软件安全与风险原则概览输入验证输出编码身份验证和密码管理会话管理访问控制加密规范错误处理和日志数据保护通讯安全系统配置数据库安全文件管理内存管理通用编码规范附录外部的参考资料附录术语表中文版年月序言本项与技术无关的文档以清单列表的形式定义了一套可以集成到软件开发生命周期中的通用软件安全编码规范采用这些规范将减少最为常见的软件漏洞一般来说开发安全的软件要比在软件包完成以后再纠正安全问题的成本低很多且还没涉及到因为安全问题而造成的损失保护关键软件资源的安全性比以往任何时候都更为重要因为攻击者的重点已逐步转向了应用层年的一项研究表明针对应用程序的攻击已占据了在互联网上观察到攻击总数的以上在使用本指南时开发团队应该从评估他们的安全软件开发生命周期成熟度和开发人员知识水平着手由于本指南不涉及如何实现每个编码规范的具体细节因此开发人员需要了解相关知识或者有足够可用资源来提供必要的指导通过本指南开发人员可在无需深入了解安全漏洞和攻击的情况下将编码规范转换成编码要求当然开发团队的其他成员应该有责任通过提供适当的培训工具和资源以验证整个系统的设计和开发是安全的本文档中使用的重要术语包括部分标题和文字都以斜体字标注并列举在附录的术语列表中关于安全软件开发框架的指南不属于本文讨论的范围但是我们推荐以下额外的常用规范和资源明确定义角色和职责为开发团队提供足够的软件安全培训采用一个安全软件开发生命周期项目建立安全编码标准开发指南项目建立一个可重用的对象库文件项目验证安全控制的有效性项目建立外包开发安全规范包括在建议书和合同中定义安全需求和验证方法项目中文版年月软件安全与风险原则概览开发安全的软件需要对安全原则有基本的了解虽然对于安全原则的全面评估超出了本指南的范围但是我们还是提供了一个快速的概览软件安全的目标是要维护信息资源的保密性完整性和可用性以确保业务的成功运作该目标通过实施安全控制来实现本指南重点介绍具体的技术控制以缓解常见软件漏洞的发生虽然主要的关注点是应用程序及其配套的基础设施但是本指南的大部分内容可应用于任意软件部署平台为了保护业务免受来自与软件相关的不能接受的风险了解风险的意义是很有帮助的风险是一组威胁业务成功因素的集合它可以被定义为一个威胁代理与一个可能含有漏洞的系统交互该漏洞可被利用并造成影响虽然这可能看起来象是一个抽象的概念但可以这样想象它一个汽车盗窃犯威胁代理来到一个停车场系统寻找没有锁车门漏洞的车当找到一个时他们打开门利用并拿走里面任何的东西影响所有这些因素在安全软件开发时都扮演了一个角色开发团队采用的方法和攻击者攻击应用程序所采用的方法之间有一个根本区别开发团队通常采用的方法是基于应用程序的目的行为换句话说开发团队根据功能需求文档和用例设计一个应用程序以执行特定的任务而另一方面攻击者基于没有具体说明应拒绝的行为则被认为是可行的原则对于应用程序可以做什么更感兴趣为了解决这个问题一些额外的元素需要被集成到软件生命周期的早期阶段这些新元素是安全需求和滥用实例本指南旨在帮助明确高等级的安全需求并解决许多常见的滥用情况开发团队应当明白基于客户端的输入验证隐藏字段和界面控件例如下拉键和单选按钮的客户端控制所带来的安全性收益是有限的这一点非常重要攻击者可以使用工具比如客户端的代理例如或网络数据包捕获工具例如进行应用程序流量分析提交定制的请求并绕过所有的接口另外和其它客户端对象可以被反编译并进行漏洞分析软件的安全漏洞可以在软件开发生命周期的任何阶段被引入包括最初没有明确的安全需求创建有逻辑错误的概念设计使用糟糕的编码规范从而带来了技术漏洞软件部署不当在维护或者更新过程中引入缺陷此外还有重要的一点需要明白软件漏洞可以超出软件本身的范围根据不同的软件漏洞和配套基础设施的性质一次成功的攻击会影响下面任何或者所有的方面软件和其相关的信息相关服务器的操作系统后端数据库在共享环境中的其它应用程序用户的系统与用户交互的其它软件中文版年月安全编码规范检查列表输入验证在可信系统比如服务器上执行所有的数据验证识别所有的数据源并将其分为可信的和不可信的验证所有来自不可信数据源比如数据库文件流等的数据应当为应用程序应提供一个集中的输入验证规则为所有输入明确恰当的字符集比如在输入验证前将数据按照常用字符进行编码规范化丢弃任何没有通过输入验证的数据确定系统是否支持扩展字符集如果支持在解码完成以后进行输入验证在处理以前验证所有来自客户端的数据包括所有参数头信息比如名字和数据值确定包括了来自或其他嵌入代码的信息验证在请求和响应的报头信息中只含有字符核实来自重定向输入的数据一个攻击者可能向重定向的目标直接提交恶意代码从而避开应用程序逻辑以及在重定向前执行的任何验证验证正确的数据类型验证数据范围验证数据长度尽可能采用白名单形式验证所有的输入如果任何潜在的危险字符必须被作为输入请确保您执行了额外的控制比如输出编码特定的安全以及在应用程序中使用的原因部分常见的危险字符包括如果您使用的标准验证规则无法验证下面的输入那么它们需要被单独验证验证空字节验证换行符验证路径替代字符点点斜杠或如果支持扩展字符集编码验证替代字符使用规范化验证双编码或其他类型的编码攻击输出编码在可信系统比如服务器上执行所有的编码为每一种输出编码方法采用一个标准的已通过测试的规则通过语义输出编码方式对所有返回到客户端的来自于应用程序信任边界之外的数据进行编码实体编码是一个例子但不是在所有的情况下都可用除非对目标编译器是安全的否则请对所有字符进行编码针对和查询语义净化所有不可信数据的输出对于操作系统命令净化所有不可信数据输出中文版年月身份验证和密码管理除了那些特定设为公开的内容以外对所有的网页和资源要求身份验证所有的身份验证过程必须在可信系统比如服务器上执行在任何可能的情况下建立并使用标准的已通过测试的身份验证服务为所有身份验证控制使用一个集中实现的方法其中包括利用库文件请求外部身份验证服务将身份验证逻辑从被请求的资源中隔离开并使用重定向到或来自集中的身份验证控制所有的身份验证控制应当安全的处理未成功的身份验证所有的管理和账户管理功能至少应当具有和主要身份验证机制一样的安全性如果您的应用程序管理着凭证的存储那么应当保证只保存了通过使用强加密单向哈希算法得到的密码并且只有应用程序具有对保存密码和密钥的表文件的写权限如果可以避免的话不要使用算法密码哈希必须在可信系统比如服务器上执行只有当所有的数据输入以后才进行身份验证数据的验证特别是对连续身份验证机制身份验证的失败提示信息应当避免过于明确比如可以使用用户名和或密码错误而不要使用用户名错误或者密码错误错误提示信息在显示和源代码中应保持一致为涉及敏感信息或功能的外部系统连接使用身份验证用于访问应用程序以外服务的身份验证凭据信息应当加密并存储在一个可信系统比如服务器中受到保护的地方源代码不是一个安全的地方只使用请求传输身份验证的凭据信息非临时密码只在加密连接中发送或作为加密的数据比如一封加密的邮件通过邮件重设临时密码可以是一个例外通过政策或规则加强密码复杂度的要求比如要求使用字母数字和或特殊符号身份验证的凭据信息应当足够复杂以对抗在其所部署环境中的各种威胁攻击通过政策和规则加强密码长度要求常用的是个字符长度但是个字符长度更好或者考虑使用多单词密码短语输入的密码应当在用户的屏幕上模糊显示比如在表单中使用输入类型当连续多次登录失败后比如通常情况下是次应强制锁定账户账户锁定的时间必须足够长以阻止暴力攻击猜测登录信息但是不能长到允许执行一次拒绝服务攻击密码重设和更改操作需要类似于账户创建和身份验证的同样控制等级密码重设问题应当支持尽可能随机的提问比如最喜爱的书是一个坏的问题因为圣经是最常见的答案如果使用基于邮件的重设只将临时链接或密码发送到预先注册的邮件地址临时密码和链接应当有一个短暂的有效期当再次使用临时密码时强制修改临时密码当密码重新设置时通知用户阻止密码重复使用密码在被更改前应当至少使用了一天以阻止密码重用攻击根据政策或规则的要求强制定期更改密码关键系统可能会要求更频繁的更改更改时间周期必须进行明确为密码填写框禁用记住密码功能中文版年月用户账号的上一次使用信息成功或失败应当在下一次成功登录时向用户报告执行监控以确定针对使用相同密码的多用户帐户攻击当用户可以被得到或被猜到时该攻击模式用来绕开标准的锁死功能更改所有厂商提供的默认用户和密码或者禁用相关帐号在执行关键操作以前对用户再次进行身份验证为高度敏感或重要的交易账户使用多因子身份验证机制如果使用了第三方身份验证的代码仔细检查代码以保证其不会受到任何恶意代码的影响会话管理使用服务器或者框架的会话管理控制应用程序应当只识别有效的会话标识符会话标识符必须总是在一个可信系统比如服务器上创建会话管理控制应当使用通过审查的算法以保证足够的随机会话标识符为包含已验证的会话标识符的设置域和路径以为站点设置一个恰当的限制值注销功能应当完全终止相关的会话或连接注销功能应当可用于所有受身份验证保护的网页在平衡的风险和业务功能需求的基础上设置一个尽量短的会话超时时间通常情况下应当不超过几个小时禁止连续的登录并强制执行周期性的会话终止即使是活动的会话特别是对于支持富网络连接或连接到关键系统的应用程序终止时机应当可以根据业务需求调整并且用户应当收到足够的通知已减少带来的负面影响如果一个会话在登录以前就建立在成功登录以后关闭该会话并创建一个新的会话在任何重新身份验证过程中建立一个新的会话标识符不允许同一用户的并发登录不要在错误信息或日志中暴露会话标识符会话标识符应当只出现在头信息中比如不要将会话标识符以参数进行传递通过在服务器上使用恰当的访问控制保护服务器端会话数据免受来自服务器其他用户的未授权访问生成一个新的会话标识符并周期性地使旧会话标识符失效这可以缓解那些原标识符被获得的特定会话劫持情况在身份验证的时候如果连接从变为则生成一个新的会话标识符在应用程序中推荐持续使用而非在和之间转换为服务器端的操作执行标准的会话管理比如通过在每个会话中使用强随机令牌或参数来管理账户该方法可以用来防止跨站点请求伪造攻击通过在每个请求或每个会话中使用强随机令牌或参数为高度敏感或关键的操作提供标准的会话管理为在连接上传输的设置安全属性将设置为属性除非在应用程序中明确要求了客户端脚本程序读取或者设置的值访问控制只使用可信系统对象比如服务器端会话对象以做出访问授权的决定使用一个单独的全站点部件以检查访问授权这包括调用外部授权服务的库文件安全的处理访问控制失败的操作中文版年月如果应用程序无法访问其安全配置信息则拒绝所有的访问在每个请求中加强授权控制包括服务器端脚本产生的请求

pdf文档 OWASP 安全编码规范 快速参考指南 2012中文翻译版

安全报告 > OWASP > 文档预览
中文文档 16 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共16页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
OWASP 安全编码规范 快速参考指南 2012中文翻译版 第 1 页 OWASP 安全编码规范 快速参考指南 2012中文翻译版 第 2 页 OWASP 安全编码规范 快速参考指南 2012中文翻译版 第 3 页
下载文档到电脑,方便使用
本文档由 路人甲2022-05-22 06:44:23上传分享
给文档打分
您好可以输入 255 个字符
网站域名是多少( 答案:github5.com )
评论列表
  • 暂时还没有评论,期待您的金玉良言
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。