独家:让代码访问安全性为ClickOnce保驾护航
作者: Susan, 出处:IT专家网, 责任编辑: 罗丽艳, 2010-01-26 10:14
对于企业级的应用来说,笔者更加推荐的是通过ClickOnce来部署应用程序。不过在使用这个策略来部署应用程序的时候,需要合理配置代码访问安全性。
【IT专家网独家撰稿】在Visual Studio平台中主要有ClickOnce和Windows Installer两种应用程序部署策略。其中Windows Installer这种方式可能大家比较熟悉一点,即直接点击setup.exe文件来安装应用程序。不过对于企业级的应用来说,笔者更加推荐的是通过ClickOnce来部署应用程序。不过在使用这个策略来部署应用程序的时候,需要合理配置代码访问安全性。一个基本的原则就是最小权限原则。只给应用程序安装、更新、运行所必需的权限。
一、ClickOnce部署策略的优势。
对于企业级应用或者客户端数量不较多的环境,笔者建议采用ClickOnce方式来部署应用程序。这主要是因为通过ClickOnce部署,可以将应用程序发布到企业的中心位置,然后用户可以从这个位置进行安装或者直接运行这个应用程序。从而可以为系统管理人员节省很多的工作量。
采用ClickOnce的部署策略,可以大大简化应用程序安装与更新的过程。如应用程序更新,不需要到每个客户端去更新。而只需要在企业的中心位置进行更新即可。各个客户端在下次登陆的时候会自动进行更新。所以当应用程序需要频繁更新或者客户端数量比较多的时候,采用ClickOnce部署策略能够起到简化应用程序部署的作用。
当然ClickOnce部署策略也有其缺陷。主要的缺陷有两个。一是通过CD-ROM安装会受到一定的限制。虽然在ClickOnce部署策略下仍然允许用户通过CD-ROM来安装应用程序,但是用户必须具有网络连接才能够进行后续的更新。二是其灵活性不是很好。它不像Windows Installer那样,在安装过程中能够给用户提供多样的选择。在实际工作中,如果程序开发人员与用户觉得这两个缺陷不会影响到日常的工作,那么笔者就建议采用ClikcOnce方式来部署应用程序。
二、熟悉ClickOnce代码访问安全性相关的要求。
与Windows Install不同,ClickOnce部署应用程序是基于.NET Framework框架的。为此会受到代码访问安全性约束的影响。所以如果要采用这个部署策略的话,那么程序开发人员要多一项技能,也就是说要熟悉代码访问安全性以及相关的配置。
简单的说,代码访问安全性是.NET Framework框架下的一种安全机制。它主要实现的时限制代码访问受保护的资源和操作的权限。比较安全的做法是要始终将ClickOnce应用程序的代码访问安全权限配置为只包含应用程序要求的权限。这是什么意思呢?当用户点击中心位置的软件安装应用程序的时候,应用程序需要访问本机操作系统的资源,甚至可能会更改注册表等信息。那么这个ClickOnce就需要有相关的权限。但是在程序开发的过程中,要对这个权限进行限制。如果这个原始安装程序受到病毒等攻击,病毒就会借助这个权限来破坏客户端操作系统。故为了安全起见,非常有必要限制应用程序代码访问受保护的资源和操作。
要提高ClickOnce应用程序的安全性,往往需要改变代码的默认设置。因为在默认情况下,ClickOnce应用程序在客户端上安装或者运行的时候,采取的是“完全信任”的权限。在大部分情况下这个做法是非常危险的。为此最好不要向应用程序授予“完全信任”的权限。因为具有“完全信任”权限的应用程序对客户端的资源(如文件、注册表等)具有不受限制的访问权。如此的话,一些隐藏在ClikcOnce应用程序中的恶意代码就有可能破坏或者窃取这些文件。另外需要注意的是,当应用程序需要“完全信任”权限的时候,系统往往会提示最终用户将这个权限授予给应用程序。如此的话,应用程序自动更新等等功能就会受到限制,从而ClickOnce部署策略带来的价值会大打折扣。
为此无论从安全性还是从功能上讲,开发人员都应该确保应用程序的代码访问安全权限制包含应用程序所要求的权限。这一点非常的重要。其直接关系到ClickOnce应用程序的成败。
三、确定应用程序所要求的权限。
在配置代码访问安全性的时候,难点不在于具体的配置,而在于确定这个应用程序需要具有哪些访问权限。如果开发的太多,则可能带来一定的安全隐患。如果开发的太少,如本来需要修改注册表的信息但是却没有给它,则就会导致应用程序安装、运行或者更新失败。故确定应用程序所需要的权限是这个作业中的关键点。
所以说确切、详细的了解应用程序所需要的权限有助于有效的配置相关的代码访问安全权限。为了帮助程序开发人员做好这项工作,在VisualStudio平台中提供了一个叫做“权限计算器”的工具。通过这个工具可以帮助开发人员得到这个应用程序所需要的相关权限。不过需要注意的是,这个工具得出来的结果只供参考。因为这个“权限计算器”具有一定的局限性。因为这工具只是对代码进行静态的分析,而无法确定后期绑定的代码或者动态加载的程序是否还需要其他的权限。另外如果应用程序设计为在权限比较少的环境中运行时动态修改其权限要求,则这个工具就会报告所需要的最大权限。这也不符合安全方面的要求。为此比较合理的做法是,开发人员先用这个权限计算器分析应用程序所需要的权限。然后再结合自己的工作经验,对这个分析报告进行微调并测试。最终确定应用程序安装、更新、运行所需要的相关权限。 |
|