C# 安全代码和不安全代码

以下内容来自微软,

    你编写的大部分 C# 代码都是“可验证的安全代码”。可验证的安全代码是指 .NET 工具可验证代码是否安全。 通常,安全代码不会直接使用指针访问内存, 也不会分配原始内存, 而是创建托管对象。

    C# 支持 unsafe 上下文,你可在其中编写不可验证的代码。 在 unsafe 上下文中,代码可使用指针、分配和释放内存块,以及使用函数指针调用方法。 C# 中的不安全代码不一定是危险的,它只是其安全性不可验证的代码。

按此描述,
    我们一般情况下写的C#代码都是安全代码;
    如果使用了unsafe关键字,其中的代码就是不安全代码;
    安全代码使用内存都是创建托管对象;

托管对象是指,托管对象指的是.net可以自动进行回收的资源,主要是指托管对象在堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.net运行库在合适的时间进行回收。(手动回收可调用GC.Collect)

java,c/c++,php,c#安全编码规范,从代码层面避免被入侵 1 业务安全编码规范 6 1.1 输入验证和数据合法性校验 6 1.1.1 避免SQL注入 6 1.1.2 避免XML注入 6 1.1.3 避免跨站点脚本(XSS) 7 1.1.4 避免跨站请求伪造(CSRF) 8 1.1.5 避免敏感信息泄露 12 1.2 安全框架 12 1.2.1 Apache Shiro安全框架 12 1.2.2 webSecrity安全框架 13 1.2.3 Enterprise Security API 13 2 基础安全编码规范 15 2.1 声明和初始化 15 2.1.1 避免类初始化的相互依赖 15 2.2 表达式 16 2.2.1 不可忽略方法的返回值 16 2.2.2 不要引用空指针 16 2.2.3 使用Arrays.equals()来比较数组的内容 16 2.3 数字类型和操作 17 2.3.1 防止整数溢出 17 2.3.2 避免除法和取模运算分母为零 18 2.4 类和方法操作 18 2.4.1 数据成员声明为私有,提供可访问的包装方法 18 2.4.2 敏感类不允许复制 18 2.4.3 比较类的正确做法 19 2.4.4 不要硬编码敏感信息 19 2.4.5 验证方法参数 19 2.4.6 不要使用过时、陈旧或低效的方法 20 2.4.7 数组引用问题 20 2.4.8 不要产生内存泄露 20 2.5 异常处理 21 2.5.1 不要忽略捕获的异常 21 2.5.2 不允许暴露异常的敏感信息 21 2.5.3 不允许抛出RuntimeException, Exception,Throwable 22 2.6 多线程编程 23 2.6.1 确保共享变量的可见性 23 2.6.2 确保共享变量的操作是原子的 24 2.6.3 不要调用Thread.run(),不要使用Thread.stop()以终止线程 26 2.6.4 确保执行阻塞操作的线程可以终止 26 2.6.5 相互依存的任务不要在一个有限的线程池执行 27 2.7 输入输出 27 2.7.1 程序终止前删除临时文件 27 2.7.2 检测和处理文件相关的错误 27 2.7.3 及时释放资源 27 2.8 序列化 28 2.8.1 不要序列化未加密的敏感数据 28 2.8.2 在序列化过程中避免内存和资源泄漏 29 3 其他参考资料 30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值