zoukankan      html  css  js  c++  java
  • Effective C# 学习笔记(四十八)使用安全代码

    .NET 运行时保证了恶意代码不可在远程设备上(即跨InternetIntranet)执行,但一些分布式部署的应用需要执行远程操作。若CLR不信任某个程序集,它就不会执行程序集的某个操作,这种机制叫做CAS(Code access security)CLR执行基于角色的权限控制。这种控制是在运行时校验的,编译时无法强制检验,而且在你的开发机上也很难发现这些权限控制的约束,因为你硬盘上的代码拥有较高的执行权限。在处理此类非安全代码时,原则是首先看能否通过其他方式不去访问这些受保护的资源;若必须使用,则将这些代码放到一个独立的程序集中。

     

    一般情况下,你不需要获取CAS的特权,除非你涉及到以下资源的访问:

     

    1. 非托管内存

    尽量不要访问非托管内存,若必须访问,则将部分处理代码单独放在一个程序集中

     

    1. 文件系统

    你可以通过基于程序集、应用程序域及当前用户的授权方式来处理文件系统的访问控制。

    使用独立存储来解决程序集访问资源控制的问题。独立存储访问资源控制的命名空间 System.IO.IsolatedStorage。

    举例:

    //写操作

    //创建访问资源控制对象

    IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForDomain();

    //创建独立存储文件流

    IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("SavedStuff.txt", FileMode.Create, iso);

    //初始化流写入器

    StreamWriter wr = new StreamWriter(myStream);

    // several wr.Write statements elided

    wr.Close();

     

    //读操作

    IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForDomain();

    string[] files = isoStore.GetFileNames("SavedStuff.txt");

    if (files.Length > 0)

    {

    StreamReader reader = new StreamReader(new

    IsolatedStorageFileStream("SavedStuff.txt", FileMode.Open, isoStore));

    // Several reader.ReadLines( ) calls elided.

    reader.Close();

    }

    对于独立存储空间(Isolated storage)来说,应注意以下几点:

    1. .NET运行环境限制了该存储空间的大小,以防止恶意代码利用该特性占用过多的磁盘空间
    2. 该存储空间对于其他的程序和用户是不可见的,不要将其用为部署配置的存储空间,否则administrator用户也改不了。
    3. 独立存储空间对非托管代码或可信用户来说是可以访问的,所以不要把其作为高密级的存储空间来时使用。

     

    1. 数据库

    为应用程序集获得完全的信任权限。

     

    1. 网络端口

     

    1. 为应用程序集获得完全的信任权限。

     

    1. Windows 注册表

    为应用程序集获得完全的信任权限。

    例如:若你的程序需要访问注册表,请将其安装在该设备上,以获得足够的权限。

     

    1. 打印子系统

    为应用程序集获得完全的信任权限。

     

    注意:一个安全的程序集应不使用指针来访问托管及非托管资源。

  • 相关阅读:
    CF1312G Autocompletion
    UOJ#11. 【UTR #1】ydc的大树
    CF51F Caterpillar
    CF295D Greg and Caves
    CF288E Polo the Penguin and Lucky Numbers
    CF401D Roman and Numbers
    CF543D Road Improvement
    CF938F Erasing Substrings
    [AGC024E] Sequence Growing Hard
    CF261D Maxim and Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2129828.html
Copyright © 2011-2022 走看看