找回密码
 注册创意安天

独家:让代码访问安全性为ClickOnce保驾护航

[复制链接]
发表于 2010-3-9 09:57 | 显示全部楼层 |阅读模式
独家:让代码访问安全性为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平台中提供了一个叫做“权限计算器”的工具。通过这个工具可以帮助开发人员得到这个应用程序所需要的相关权限。不过需要注意的是,这个工具得出来的结果只供参考。因为这个“权限计算器”具有一定的局限性。因为这工具只是对代码进行静态的分析,而无法确定后期绑定的代码或者动态加载的程序是否还需要其他的权限。另外如果应用程序设计为在权限比较少的环境中运行时动态修改其权限要求,则这个工具就会报告所需要的最大权限。这也不符合安全方面的要求。为此比较合理的做法是,开发人员先用这个权限计算器分析应用程序所需要的权限。然后再结合自己的工作经验,对这个分析报告进行微调并测试。最终确定应用程序安装、更新、运行所需要的相关权限。
 楼主| 发表于 2010-3-9 09:57 | 显示全部楼层
 最后笔者再强调一次,虽然采用系统的默认权限(完全信任)部署ClickOnce应用程序也是可行的,但是安全性上会有问题。这往往是一些刚入门的程序开发人员会犯的初级错误。作为这个应用程序项目管理人员,一定要确保应用程序部署之前有合适的安全权限。

  四、配置安全权限。

  确定好应用程序所需要的权限之后,接下去的工作就是进行相关的配置。在上面的内容中笔者说过,配置并不是重点。了解应用程序所需要的权限才是这个作业中的关键所在。因为配置只是一个简单的技术问题。所以在这里不对此进行详细的展开。在这里笔者主要要强调一点,从不同位置部署应用程序时,其所需要的权限可能有所不同。如从互联网上安全应用程序其风险比较高,需要配置比较严格的权限。而如果从企业内部局域网中部署ClickOnce应用程序时,安全性相对高一点。故对权限的限制稍微可以宽一点。在配置安全权限时,还需要对此进行区别对待。

  五、对应用程序进行调试确保权限符合应用程序的要求。

  在实际工作中,在开发应用程序的时候往往采用的是完全信任的权限。这主要是为了方便程序的开发与测试。但是在这个应用程序投入生产使用之前,需要对代码的访问权限进行调整。在完全信任的权限下,程序开发人员在调试应用程序时看不到用户在使用受限权限运行这个应用程序时是看不到任何异常的。但是一旦对这个应用程序的代码加入限制后,就可能会有异常出现。所以说加入权限的限制之后,需要对应用程序再次进行调试,以判断所添加的限制是否有问题。笔者建议,在最后一个阶段要使用通最终用户相同的权限来调试这个应用程序,而不是完全信任的权限。这可以帮助程序开发人员捕捉到异常信息。程序开发人员可以选择“项目设计器”中的“安全”页签,设置启用“受限权限进行调试”选项。当使用受限权限来调试应用程序的时候,任何没有在安全页签中启用的代码安全性要求都会引起异常。为了方便程序开发人员进行调试,只要出现异常,系统都会出现一个异常帮助器,来提醒开发人员该如何修改代码以防止出现异常。

  当然异常帮助器中的相关信息程序开发人员只能够做一个参考。具体该如何调整、是否有调整的必要,仍然要依靠程序开发人员的经验来判断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册创意安天

本版积分规则

Archiver|手机版|小黑屋|创意安天 ( 京ICP备09068574,ICP证100468号。 )

GMT+8, 2024-12-22 14:57

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表