欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > PDF文档下载
    分享到微信 分享到微博 分享到QQ空间

    HS T 33-2011 .NET安全编码规范.pdf

    • 资源ID:1499072       资源大小:1.08MB        全文页数:22页
    • 资源格式: PDF        下载积分:5000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要5000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    HS T 33-2011 .NET安全编码规范.pdf

    1、ICS 35.080 L70/84 HS 中华人民共和国海关行业标准 HS/T 332011 .NET安全编码规范 Secure coding specification for .NET 2011 - 08 - 12发布 2011 - 10 - 01实施 中华人民共和国海关总署 发布 HS/Z XXXX I 目 次 前言 . II 引言 . III 1 范围 . 1 2 术语和定义 . 1 3 代码安全性分类 . 2 4 代码安全性声明要求 . 3 5 中间结果和状态信息处理要求 . 3 6 限制方法调用要求 . 4 7 遗留系统代码封装要求 . 4 8 敏感数据操作异常要求 . 5 9 其

    2、他 . 5 附录A(资料性附录) 安全编码示例 . 7 A.1 代码访问安全性示例 . 7 A.2 中间结果和状态信息处理示例 . 9 A.3 限制方法调用示例 . 10 A.4 越权访问敏感信息的示意过程 . 12 A.5 遗留系统代码封装要求示例 . 13 A.6 敏感数据操作异常示例 . 14 参考文献 . 18 HS/Z XXXX II 前 言 本标准按照GB/T 1.1 -2009给出的规则起草。 本标准由中华人民共和国海关总署科技发展司提出。 本标准由中华人民共和国海关总署政策法规司归口。 本标准起草单位:中华人民共和国海关总署科技发展司、全国海关信息中心(全国海关电子通关中 心)

    3、。 本标准主要起草人:*、*。 本标准是第一次制定。 HS/Z XXXX III 引 言 随着海关信息化的深入,.NET应用编码中的安全问题受到普遍关注。现阶段,.NET开发技术已在中 国海关普遍应用,在稳步推进等级保护、分级保护的过程中,.NET编码的安全问题日益受到重视。 安全编码方法是指运用科学的编码技巧和手段,稳妥的实现应用功能,并针对主要编码漏洞提出有 针对性的防护对策和整改措施,进而防范和化解应用编码安全风险,将风险控制在可接受的水平,为最 大限度的保障信息系统安全提供技术保障。 安全编码方法作为信息安全保障工作的基础性工作和重要手段,应贯穿于海关信息系统建设、维护 过程,是海关信

    4、息系统实现安全开发的重要科学方法之一。 本标准是以海关既有.NET项目的开发、使用情况为基础,确定.NET应用编写过程中需要遵循并沿革 的相关安全规范。 本标准编制遵循通用性原则,确定.NET安全编码的基本原则、方法、要求,而不对具体实现技巧和 编码细节进行过于详尽的描述。 HS/Z XXXXXX 1 .NET安全编码规范 1 范围 本标准给出了海关信息系统实施中安全编码的原则性要求,适用于海关自建、合建、委托外部单位 建设的信息系统或相关模块的开发工作。 注:本标准所指“代码”包括生产代码、测试程序代码、工具代码以及用于调试和维护的其他代码。如没有特别说 明,本标准中提及的“应用”其含义均为

    5、“.NET应用”,本标准中提及的“项目”其含义均为“.NET项目”。 本标准提及的“敏感信息”的界定应依据海关相关管理规定。 2 术语和定义 下列术语和定义适用于本文件。 2.1 公共库代码 common library 专门用于项目间共享使用的程序库代码。 2.2 程序集 assembly .NET应用程序编译结果的存储形式。所有托管类型和资源都包含在某个程序集内,并被标记为只能 在该程序集的内部访问,或者被标记为可以从其他程序集中的代码访问。 2.3 安全策略 security policy 规定如何在组织或系统中管理、保护、分发包括敏感信息在内的资产的规则、命令、条例。 HS/T 22-

    6、2009, 定义3.5.10 2.4 代码访问安全性 code access security (CAS) 公共语言运行时提供的一种机制,通过该机制,安全策略授予托管代码权限,并且这些权限是强制 的,从而帮助限制允许代码执行的操作。 2.5 视窗通信基础 windows communication foundation(WCF) 一种 Windows 托管技术,用于生成并管理面向服务的系统。 2.6 序列化 serialization HS/Z XXXXXX 2 将对象的状态信息转换为可以存储或传输的格式的过程。 注:在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储

    7、区中读取或反序列化对 象的状态,重新创建该对象。 2.7 方法 method 描述行为的函数。 2.8 证据 evidence 标识代码所用安全策略的属性。 注:如数字签名或其原位置的区域或站点,安全策略使用其为代码授予权限。 2.9 信息系统 information system 由计算机及其相关的和配套的设备、设施(含网络)构成的,按照一定的应用目标和规则对信息进 行采集、加工、存储、传输、检索等处理的人机系统。 典型的信息系统由三部分组成:硬件系统(计算机硬件系统和网络硬件系统);系统软件(计算机 系统软件和网络系统软件);应用软件(包括由其处理、存储的信息)。 GB/T 20984-2

    8、007,定义3.8 2.10 托管代码 managed code 由公共语言运行库环境执行的代码。 2.11 非托管代码 unmanaged code 直接由操作系统执行的代码。 2.12 遗留系统 legacy system 采用旧版本技术或.NET异构平台技术建设的信息系统。 3 代码安全性分类 根据安全性要求,海关.NET项目代码划分如下: a) 安全性无关的代码(N类:Neutral):技术上可以运行于任何系统权限的代码; b) 普通的应用逻辑描述性代码(B类:Business):实现业务逻辑、业务实体、业务流程的代码; c) 非托管代码(U类:Unmanaged):直接调用运行环境非

    9、托管资源的代码、直接调用操作系统 API、本地.Lib、COM+的代码; d) 公共库代码(C类:Common); e) 直接访问海关敏感技术资源的公共库代码(S类:Sensitive):例如访问海关内网安全系统、 活动目录、审计系统的代码。 HS/Z XXXXXX 3 同一个系统中,各类代码的安全性要求如图1。 N B C U S 代码安全性要求 低 高 图1 各类代码的安全性要求 4 代码安全性声明要求 下列情景应采用该方式定义代码访问权限: a) 对已明确需要增加访问权限控制的代码,声明采用最小权限; b) 涉及表1所列权限,应在代码中明确声明; c) 所有互操作调用应显式声明需要访问非

    10、托管代码; d) WCF访问中,为了提高代理类的安全性,应采用代码声明安全。 表1 敏感代码权限表 权限 说明 SecurityPermission 一般性安全访问要求。 UnmanagedCode 允许托管代码调用非托管代码。 SkipVerification 如果没有验证,代码可以进行任何操作。 ControlEvidence 允许采用失效的证据欺骗安全策略。 ControlPolicy 允许修改安全策略,也可禁用安全性。 SerializationFormatter 可通过序列化规避代码访问安全性机制。 ControlPrincipal 可设置当前主体身份进而欺骗基于角色的安全。 Con

    11、trolThread 可控制与线程关联的安全状态。 ReflectionPermission 允许通过反射获得系统安全策略要求及其它敏感业务信息。 MemberAccess 可使私有成员可访问性机制无效。 S、U类代码应采用,C类代码宜采用,B、N类代码可采用。 示例参见附录A的A.1。 HS/Z XXXXXX 4 5 中间结果和状态信息处理要求 S、U、B类代码中类型的实例状态应声明为private,对于C类代码最大限度声明为internal。具体 要求如下: a) 为了防止通过继承获得访问,包括敏感信息的类声明为sealed; b) 敏感状态信息严禁声明为protected; c) 除非有

    12、特殊网络保护,严禁将包括敏感状态信息的类声明为可序列化; d) 运行环境统一使用发布(Release)版本的程序集。 S、U、C、B类代码应采用,N类代码宜采用。 示例参见附录A的A.2。 6 限制方法调用要求 类型实例方法访问控制应用中应按照安全性要求高低,采用表2中所列访问控制符。 表2 安全性要求与访问控制符对应关系表 访问控制符 说明 安全性要求 public 访问不受限制。 低 protected 访问仅限于包含类或从包含类派生的类型。 中 internal 访问仅限于当前程序集。 高 protected internal 访问仅限于当前程序集或从包含类派生的类型。 高 privat

    13、e 访问仅限于包含类型。 最高 为确保调用过程的安全性,应对方法调用做如下限制: a) 涉及敏感资源的调用,应对调用者身份进行检查; b) 涉及敏感资源的调用,应对调用者权限进行检查; c) 涉及调用敏感资源的类型应明确其子类必须具有何种身份或者权限; d) 涉及调用敏感资源的类型定义虚方法时应限制其子类的身份或权限要求; e) 最终业务实体类应禁止被子类继承(sealed)。 S、U、C类代码应采用,B类代码宜采用,N类代码可采用。 示例参见附录A的A.3。 7 遗留系统代码封装要求 下列情形应在封装遗留系统代码时进行安全检查: a) 后绑定方式调用COM+; b) 直接引用既有系统组件(C

    14、OM+、.Net 1.1、Java Applet等); c) 直接调用操作系统本地API; 调用相关系统ActiveX控件。 U类代码应采用。 示例参见附录A的A.4、A.5。 HS/Z XXXXXX 5 8 敏感数据操作异常要求 如控制不当,应用异常易造成敏感信息泄漏。为此,应在相关处理过程进行限制,防止敏感信息及 过度的技术信息泄漏。异常处理流程如图2。 出现异常 是否为应用自 身相关异常? 抛出异常 完成 是否需要审 计? 记录审计信息 是否需要替换 敏感信息? 替换敏感信息 抛出异常 否 是 是 否 否 是 图2 异常处理流程 异常处理流程应遵循如下原则: a) 对于非应用自身相关异常

    15、直接抛向上层逻辑; b) 对于需要审计的错误环节或错误类型,应先写审计日志; c) 写审计日志过程中如出现异常不应回滚操作,应将异常同时记录; d) 如异常存在嵌套结构,应记录异常完整的嵌套结构; e) 如异常中涉及敏感错误信息应先对错误信息替换,并抛出已替换敏感信息的异常。 S类代码应采用,B类代码宜采用,C、U、N类代码可采用。 示例参见附录A的A.6。 9 其他要求 应用开发中还应实施如下安全编码措施: HS/Z XXXXXX 6 a) 应始终对用户输入的信息进行必要的安全检查; b) 应使用 checked 关键字检查算术运算溢出; c) 应始终对参数使用贴切的数据类型; d) 应验证

    16、用于生成SQL语句的各类参数; e) 应使用海关统一要求的安全组件完成加密、签名功能; f) 应为程序集指定强名称; g) 不应在除审计日志以外的其他任何日志中保留敏感信息; h) 不应在 XML 或其他配置文件中存储敏感信息; i) 应对涉及敏感信息的代码补充安全注释,说明安全要求和处理规范; j) 不应将密码或其他敏感信息编码到应用程序中。 HS/Z XXXXXX 7 A A 附 录 A (资料性附录) 安全编码示例 A.1 代码访问安全性示例 对已明确需要增加访问权限控制的代码,声明采用最小权限。 示例1: 程序集级文件访问权限声明: C# using System.Security.P

    17、ermissions; assembly: FileIOPermissionAttribute(SecurityAction.RequestMinimum, Write = entry.txt) 示例2: 类级文件访问权限声明: C# using System; using System.IO; using System.Security.Permissions; assembly: FileIOPermission(SecurityAction.RequestMinimum, Read=entry.txt) namespace ChinaCustoms.Training.Guidline.S

    18、ecurity public class TestConsole public static void Main(string args) / Attempt to create a file using (Stream s = new FileStream(entry.txt, FileMode.Create) using (StreamWriter sw = new StreamWriter(s) sw.Write(This is some test data.); / Attempt to open the file that was previously created. using

    19、(Stream s = new FileStream(entry.txt, FileMode.Open) using (StreamReader sr = new StreamReader(s) Console.WriteLine(sr.ReadLine(); HS/Z XXXXXX 8 执行结果 This is some test data. 所有互操作调用应显示声明需要访问非托管代码。 示例3: 互操作访问H2000 COM+: C# using System.Security.Permissions; assembly:SecurityPermissionAttribute(Securi

    20、tyAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode) namespace ChinaCustoms.Training.Guidline.Security using System; using System.Runtime.InteropServices; WCF调用中,为了提高代理类的安全性,宜采用代码声明安全。 示例4: WCF中声明只有完全信任的类型可调用WCF服务: C# assembly: AllowPartiallyTrustedCallers ServiceContract public in

    21、terface IMyContract OperationContract void MyMethod(); PermissionSet(SecurityAction.Assert, Name = FullTrust) public class MyContractClient : ClientBase, IMyContract, IDisposable public MyContractClient() public MyContractClient(string endpointName) : base(endpointName) #region Constructors public v

    22、oid MyMethod() Channel.MyMethod(); HS/Z XXXXXX 9 public new void Close() base.Close(); void IDisposable.Dispose() Close(); #endregion A.2 中间结果和状态信息处理示例 为了防止通过继承获得访问,包括敏感信息的类声明为sealed; 示例: 由于设计不当导致恶意代码通过继承修改税费信息: C# using System; namespace ChinaCustoms.Training.Guidline.Security class BugTaxForm prot

    23、ected double tax = 0; public double Tax get return tax; class ViciousTaxForm : BugTaxForm public ViciousTaxForm() tax = 5000; public class TestConsole public static void Main(string args) BugTaxForm tax = new ViciousTaxForm(); Console.WriteLine(tax.Tax); HS/Z XXXXXX 10 执行结果 5000 A.3 限制方法调用示例 采用LinkD

    24、emand和InheritanceDemand关键字保护报关单实体类。 示例1: 未sealed的报关单类: C# using System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust)

    25、public class Entry 示例2: sealed的报关单类: C# using System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust) public sealed class Entry 示例3: 公共抽象类型(public abstract),应定义为LinkDemand和InheritanceDemand: C# u

    26、sing System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security HS/Z XXXXXX 11 PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust) public abstract class IcCardBase 示例4: 限制恶意程序

    27、覆盖报关单类放行方法,方式1: C# using System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security abstract class Entry private bool isReleased; PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) PermissionSetAttribute(SecurityAction.LinkDemand, Name = Full

    28、Trust) public virtual void Release() isReleased = false; 示例5: 限制恶意程序覆盖报关单类放行方法,方法2: C# using System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security abstract class Entry PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) PermissionSetAttri

    29、bute(SecurityAction.LinkDemand, Name = FullTrust) public abstract void Release(); HS/Z XXXXXX 12 对于涉及敏感方法的公共接口,需要限制具体实现方法具有特定访问权限。 示例6: 接口方法明确要求的安全权限在子类中必须严格遵从: C# using System; using System.Security.Permissions; namespace ChinaCustoms.Training.Guidline.Security public interface IEntry PermissionSet

    30、Attribute(SecurityAction.LinkDemand, Name = FullTrust) PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) void Release(); PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust) PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = FullTrust) class Entry

    31、 : IEntry public void Release() A.4 越权访问敏感信息的示意过程 出于进度和成本的考虑,海关信息化建设中经常需要对既有组件进行封装,如不对此类调用严格限 制,易形成安全隐患,为此应在封装代码环节增加必要的安全控制。图A.1中显示出通过封装遗留代码, 越权访问敏感信息的示意过程。 HS/Z XXXXXX 13 图A.1 通过封装遗留代码越权访问敏感的示意过程 A.5 遗留系统代码封装要求示例 示例: 后绑定调用COM+时声明权限要求: C# using System; using System.Reflection; using System.Security.

    32、Permissions; namespace ChinaCustoms.Training.Guidline.Security assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode) public class NativeHelper PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust) public static object CreateO

    33、bject(string progId) Type comType = Type.GetTypeFromProgID(progId); object result = Activator.CreateInstance(comType); return result; HS/Z XXXXXX 14 PermissionSetAttribute(SecurityAction.LinkDemand, Name = FullTrust) public static object Invoke(object comObject, string method, object arguments) if (

    34、comObject = null) throw new NullReferenceException(); return comObject.GetType().InvokeMember( method, BindingFlags.InvokeMethod, null, comObject, arguments); A.6 敏感数据操作异常示例 由于Finally方法会被严格执行,异常重新抛出前Finally部分已经提前调用。因此,访问敏感信息 的过程中,应在Finally部分显示释放非托管资源和其他重要的系统资源。 示例1: 存在错误的异常处理: C# using System; using

    35、 System.Diagnostics; namespace ChinaCustoms.Training.Guidline.Security sealed class BugEntry private bool isReleased = false; public void InternalWorkflow() Trace.WriteLine(Release Status : + isReleased); try isReleased = true; Trace.WriteLine(Release Status : + isReleased); throw new Exception(); /

    36、 试图挽救错误情况下放行标志设置, 但该段代码没机会真正执行 isReleased = false; finally HS/Z XXXXXX 15 Trace.WriteLine(Release Status : + isReleased); public void AboveWorkflow() try InternalWorkflow(); catch Trace.WriteLine(Release Status : + isReleased); public class TestConsole public static void Main() BugEntry entry = new

    37、BugEntry(); entry.AboveWorkflow(); 执行结果: Release Status : False Release Status : True Release Status : True Release Status : True 说明试图恢复放行标志的逻辑没有执行 由于Finally方法自身出现错误时不会抛出异常,因此出于审计、运行监控等需要,内层应用逻辑 应采取直接抛出异常的方式,不应在Finally部分抛出处理后的异常信息。 示例2: 抛出层次型异常: C# using System; using System.Diagnostics; HS/Z XXXXXX

    38、 16 namespace ChinaCustoms.Training.Guidline.Security sealed class BugEntry private bool isRelease; public void InternalWorkflow() try isRelease = true; Trace.WriteLine(Internal try); throw new Exception(); catch isRelease = false; Trace.WriteLine(Internal catch); throw; finally Trace.WriteLine(Inte

    39、rnal finally); public void AboveWorkflow() isRelease = true; try Trace.WriteLine(External try); InternalWorkflow(); catch isRelease = false; Trace.WriteLine(External catch); finally Trace.WriteLine(External finally); HS/Z XXXXXX 17 Trace.WriteLine(isRelease); public class TestConsole public static v

    40、oid Main() BugEntry entry = new BugEntry(); entry.AboveWorkflow(); 执行结果: External try Internal try Internal catch Internal finally External catch External finally False 说明即便内层、外层都可能存在异常的情况下,如果均涉及有严格容量限制的资源访问,均可以在 Finally部分进行释放,异常情况下设置“放行”标可以采用这种纵深try. catch.finally的方式 进行保护。为保护程序堆栈,应确保finally部分不会发生未捕获的异常。 HS/Z XXXXXX 18 参 考 文 献 1GB/T 18336- 2008 信息技术 安全技术 信息技术安全性评估准则 2GB/T 19715.1 -2005 信息技术 信息技术安全管理指南 第1部分:信息技术安全概念和模 型 3GB/T 5271.8 -2001 信息技术 词汇 第8部分:安全 4HS/T 22 -2009 海关信息化术语 5GB/T 20984- 2007 信息安全技术 信息安全风险评估规范 6Visual Studio 和 .NET Framework 词汇表 微软 ,该文献以互联网文件的形式存于网页 _


    注意事项

    本文(HS T 33-2011 .NET安全编码规范.pdf)为本站会员(李朗)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
    备案/许可证编号:苏ICP备17064731号-1 

    收起
    展开