100165419.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 81 行 · 第 1/2 页

HTM
81
字号
                    </div>
                </div>
                </div>
            <!-- main -->
            <div id="main">
                <div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">当用户坐在计算机前,单击正在使用的应用程序上的按钮时,应用程序会在后台作出响应,如果用户正在试图使用一个没有相关模块的特性,应用程序就会与</span><span lang="EN-US" style="COLOR: black">Internet</span><span style="COLOR: black; FONT-FAMILY: 宋体">连接,把模块下载到全局程序集缓存中,并开始执行那些模块,所有的一切都没有给出提示。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">这种在后台进行升级的功能已经在许多</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">应用程序中使用了,但是,我们必须关注与所谓的&ldquo;移动代码</span><span lang="EN-US" style="COLOR: black">(mobile code)</span><span style="COLOR: black; FONT-FAMILY: 宋体">&rdquo;相关的安全问题。也就是说,有什么根据能说明正在下载的代码是值得信任的?怎样知道请求的模块是正在接收的模块?</span><span lang="EN-US" style="COLOR: black">CLR</span><span style="COLOR: black; FONT-FAMILY: 宋体">在后台做了些什么工作以确保</span><span lang="EN-US" style="COLOR: black">Web </span><span style="COLOR: black; FONT-FAMILY: 宋体">站点上的控件没有读取私人的电子邮件?</span></p>
<p class="MsoNormal"><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">执行程序集的安全性策略。</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">根据它所具有的程序集信息</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">例如程序集来自哪里,它们是由谁发布的</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">,把程序集划分为具有相似特征的代码组。例如,运行程序把企业网上的所有代码放在一组。然后,使用安全性策略</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">通常由系统管理员使用代码访问安全策略工具</span><span lang="EN-US" style="COLOR: black">caspol.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">命令行实用程序或</span><span lang="EN-US" style="COLOR: black">Microsoft</span><span style="COLOR: black; FONT-FAMILY: 宋体">管理控制台来定义</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">去决定在非常小的粒度级别上应该赋予代码什么权限。需要做什么工作才能确保机器或某个应用程序的安全?什么也不需要,因为所有的代码都自动运行在</span><span lang="EN-US" style="COLOR: black">CLR</span><span style="COLOR: black; FONT-FAMILY: 宋体">的安全环境中,但可以在必要时禁用安全性。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">除了相信正在执行的代码是可信赖的之外,还要允许应用程序的用户访问他们需要的特性</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">但不要太多</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">,这一点也是非常重要的。依靠</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">的基于角色的安全性,可以对用户和他们的角色进行有效的管理。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">本章将讨论</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">中可以帮助管理安全的一些特性,其中包括怎样避开有害的代码、怎样管理安全性策略,以及怎样通过程序设计的方式访问安全子系统等。除此之外,还将讨论怎样安全地部署</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">应用程序,并且给出一些小的应用程序示例,以巩固本章中所介绍的概念。</span></p>
<h3 style="MARGIN-TOP: 11.4pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 11.4pt"><a ftel="_Toc507815599"><span lang="EN-US">14.1&nbsp; </span></a><span style="FONT-FAMILY: 楷体_GB2312">代码访问的安全性</span></h3>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">代码访问的安全性是</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">的一个特性,它根据代码的信任级别来管理代码。如果</span><span lang="EN-US" style="COLOR: black">CLR</span><span style="COLOR: black; FONT-FAMILY: 宋体">非常信赖代码,允许它们运行,就会执行代码。但是,根据提供给程序集的权限,代码也许要在有限制的环境中运行。如果代码没有得到足够的信赖去运行,或者虽然代码运行了,但试图执行没有相关权限的行为,则会产生一个安全异常</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">其类型是</span><span lang="EN-US" style="COLOR: black">SecurityException</span><span style="COLOR: black; FONT-FAMILY: 宋体">或它的子类</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">。代码访问的安全性系统意味着可以停止有害代码的运行,也可以允许代码运行在受保护的环境中,在受保护的环境中,我们相信代码不会进行破坏。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">例如,如果用户试图运行一个应用程序,执行从</span><span lang="EN-US" style="COLOR: black">Internet</span><span style="COLOR: black; FONT-FAMILY: 宋体">上下载的代码,则默认的安全性策略将生成一个异常,该应用程序会启动失败。同样,如果用户从网络驱动器上运行应用程序,则那个应用程序可以运行,但是如果那个应用程序试图访问本地驱动器上的文件,运行时就会<span style="LETTER-SPACING: 0.1pt">产生一个异常,根据应用程序中处理错误的程序,应用程序会退出对文件的访问,或者退出执</span>行。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">对于大多数应用程序而言,</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">代码访问的安全性都是非常有用的。代码访问的安全性提供高水平的保护,以远离有害的代码,但是,通常我们涉及不到这个方面。我们将涉及到的一个领域是安全性策略的管理,尤其是在把桌面配置为信赖提供应用程序的软件厂商的代码时,情况更是如此。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在开发应用程序时,对于其中包含的元素,如果要严密地控制它们的安全性,则可以使用代码访问的安全性。例如,如果公司的数据库中包含极其重要的数据,则可以使用代码访问的安全性,规定什么代码允许访问数据库,而什么代码不允许访问数据库。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">代码访问的安全性的主要目的是保护资源</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">例如本地磁盘、网络和用户接口等</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">免受有害代码的破坏,而不是使软件免受用户的破坏。对于与用户相关的安全问题,通常可以使用</span><span lang="EN-US">Windows 2000</span><span style="FONT-FAMILY: 宋体">内置的用户安全子系统,或者利用</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">中基于角色的安全性,这些内容将在本章的后面讨论。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">代码访问的安全性以两个高层次的概念为基础,即代码组</span><span lang="EN-US" style="COLOR: black">(Code Group)</span><span style="COLOR: black; FONT-FAMILY: 宋体">和权限</span><span lang="EN-US" style="COLOR: black">(Permissions)</span><span style="COLOR: black; FONT-FAMILY: 宋体">。下面讨论这两个概念,因为它们构成了下述内容的基础:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">代码组:代码组用于把具有相似特征的代码集合到一组。通常,集合时所依据的最重要特征就是代码来自哪里。例如,代码组包括&ldquo;</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">&rdquo;</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">代码来自</span><span lang="EN-US">Internet)</span><span style="FONT-FAMILY: 宋体">和&ldquo;</span><span lang="EN-US">Intranet</span><span style="FONT-FAMILY: 宋体">&rdquo;</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">代码来自</span><span lang="EN-US">LAN)</span><span style="FONT-FAMILY: 宋体">。把程序集放到代码组中时所使用的信息称为&ldquo;证据&rdquo;。</span><span lang="EN-US">CLR</span><span style="FONT-FAMILY: 宋体">收集的其他证据包括代码的发布者、代码的强名以及从中下载代码的</span><span lang="EN-US">URI</span><span style="FONT-FAMILY: 宋体">等。代码组的排列是层次状的,程序集总是与几个代码组相匹配。层次根部的代码组称为&ldquo;</span><span lang="EN-US">All Code</span><span style="FONT-FAMILY: 宋体">&rdquo;,包含其他所有的代码组。层次用于确定程序集属于哪一个代码组,如果程序集提供的证据与树中的代码组不匹配,则程序集不属于树的任何一个代码组。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">权限:权限是允许每一个代码组执行的动作。例如,权限包括&ldquo;可以访问用户界面&rdquo;和<span style="LETTER-SPACING: 0.1pt">&ldquo;可以访问本地存储器&rdquo;等。系统管理员通常在</span></span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">Enterprise</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">级、</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">Machine</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">级和</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">User</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">级上管理权限。</span></p>
<p class="MsoNormal"><span lang="EN-US">CLR</span><span style="FONT-FAMILY: 宋体">中的</span><span lang="EN-US">Virtual Execution System</span><span style="FONT-FAMILY: 宋体">用于载入和运行程序。</span><span lang="EN-US">Virtual Execution System</span><span style="FONT-FAMILY: 宋体">提供了执行托管代码所需要的功能,并使用程序集元数据把模块在运行期间连接在一起。当</span><span lang="EN-US">VES</span><span style="FONT-FAMILY: 宋体">载入程序集时,</span><span lang="EN-US">VES</span><span style="FONT-FAMILY: 宋体">通常把程序集与一个或多个代码组相匹配。每一个代码组都被赋予了一个或多个权限,指定各个代码组中的程序集可以执行什么动作。例如,如果</span><span lang="EN-US">MyComputer</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">代码组被赋予</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">FileIOPermission</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">权限,则意味着来自本地机器上的程序集可以读写本地文件系</span><span style="FONT-FAMILY: 宋体">统。</span></p></div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165372.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165420.htm">下一页</a>
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165419.htm'><font color='red'>14.1  代码访问的安全性</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165370.htm'>10.2.3  Assembly类</a></div><div style='float:right;width:49%'>·<a href='100165371.htm'>10.2.4  完成WhatsNewAttributes示例</a></div><div style='float:left;width:49%'>·<a href='100165372.htm'>10.3  小结</a></div><div style='float:right;width:49%'>·<a href='100165420.htm'>14.1.1  代码组</a></div><div style='float:left;width:49%'>·<a href='100165421.htm'>14.1.2  代码访问权限和权限集</a></div><div style='float:right;width:49%'>·<a href='100165422.htm'>14.1.3  策略的级别:Machine、User和Enterprise</a></div></div>
                    </div>
                </div>
                </div>
        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?