虽然说Visual Studio提供了丰富多彩的功能和组件已经能够满足用户大部分的需求。但是有时候开发人员可能仍然需要其他应用程序的帮助才能够完成某些特定的任务。此时就需要扩展Visual Studio的环境。如现在需要让系统自动定期执行某项任务,如数据备份或者报表生成,此时就可能需要操作系统的任务管理器的协助。
Visual Studio平台是一个比较友好的开发平台,其具有一定的自动化和扩展性。不过在扩展Visual Studio环境的时候,笔者提醒各位用户要注意安全型问题。具体的来说,笔者认为Visual Studio用户在扩展环境的时候,需要了解如下内容。
一、外接程序可能带来的安全隐患。
根据以往的经验,如果在应用程序中使用了第三方的工具或者软件,系统很容易存在如下这些安全隐患。一是攻击者可以通过第三方软件的安全漏洞,来盗用用户系统上的特权;二是可以借助第三方工具来调整、更改或者重定向 用户系统上的操作。在以上的基础上,进一步危害用户系统上的数据安全等等。应用程序如果允许使用第三方的工具,就好像开了一扇门,其难免会带来一定的安全隐患。这很难避免。
现在的关键是开发人员要能够意识到这一点,并预先采取一定的预防措施。如在开发应用程序的时候,永远不要假设应用程序只会在特定的环境中运行,不会受到恶意的工具。而是应该假定系统会在最恶意的环境中运行,并进行相应的设计、编写与测试。【IT专家网独家撰稿】
在程序开发时就考虑到安全型,这样设计和生成的代码比事后添加安全型机制的代码更加可靠。特别是需要采用第三方工具的时候,尤其显得重要。
二、尽量少用API函数。
虽然在Visual Studio环境扩展中,对API函数也能够提供很好的支持。但是笔者还是要建议用户在使用API函数是要慎之又慎,尽量少用。这主要是因为从安全的角度考虑,有些API函数的安全系数并不高,甚至比其他函数更加危险。如某些API函数其运作的方式本身就具有比较大的安全漏洞;或者说API函数可能会因为不正确的调用或处理而变得更加危险。【IT专家网独家撰稿】
在考虑API安全隐患的时候,比较容易忽视的是不安全的调用。那些本身就有缺陷的API函数反而容易被识别。而平时看起来比较安全,但是由于调用方法或者时机不对而造成的新的安全隐患,反而容易被用户所忽视。所以在调用API函数的时候,请不要简单的假设代码只使用了被认为安全的API函数。笔者的建议是,如果真的要使用API函数的话,一定要在开发过程中加入适当的安全措施。如要避免使用硬编码路径、避免面使用硬编码连接字符串,要为API函数设置完整的、单独的异常处理程序。特别值得一提的是,在调用API函数之前与之后一定要检查用户是否有相关的权限。这些安全措施都有利于提高API函数的安全。
如果真的需要在Visual Studio中使用API函数的话,用户一定要确保了解所需要调用的各种API函数的缺陷,以及不合适的调用可能会带来的安全隐患。了解这些内容之后,在应用程序开发中要采取相应的措施来避免这种意外的发生。 三、合理设置第三方程序外挂的位置。
一般来说系统加载的外接程序主要有两个来源。一是本地,如来自操作系统上的任务管理器;二是远程,如外部网站等等。在开发的过程中,为了安全起见,需要对外挂程序的来源进行限制。如只是出于定期备份数据的需要,那么只允许外挂操作系统任务管理器。不要看这只是一个小小的设置,实践证明其能够给系统带来很大的安全性。
为了防止恶意外界程序自动激活,在Visual Studio平台中提供了一些选项来提升外接程序的安全性。在“外接程序宏的安全性”、“工具选项”窗口中可以看到相关的设置。具体的来说,主要是两个选项。一是“允许加载外接程序组建”。如果选中这个选项的话,则系统在运行过程中允许加载外加程序。系统默认的值是“选中”。相反,没有选中的话则禁止在Visual Studio中加载外挂程序。第二个选项是“允许从URL加载外接程序组件”。如果选中这个选项的话,则系统允许从外部网站加载外挂程序,默认情况下,这个选项是没有选中的,表示禁止远程加载外挂程序。这里有一个小问题要注意。如果实在Vista操作系统上运行Visual Studio2008的时候,“外接程序/宏的安全型”选项页签上的“允许加载外接程序组件”这个选项还是要选中的。否则的话,容易导致IDE挂起的错误。【IT专家网独家撰稿】
这两个选项从安全考虑,笔者的意见是只有在需要的时候才启用它。而且如果启用的话,一定要根据采用的第三方程序的不同采取适当的安全措施。如需要指定外接程序的路径等等。在“外接程序/宏的安全性”选项页上,有一个“外接程序文件路径”参数。在这里可以预先定义常见路径的列表。这个列表允许开发人员指定Visual Studio平台使用哪个文件夹查找基于XML的外接程序定义文件。
四、外接程序的注册与激活。
创建了外接程序之后,必须先向Visual Studio平台中注册这个外接程序之后,才可以在外接程序管理器中激活它。这也是Visual Studio平台的一种安全考虑。根据不同的版本,其注册的机制是不同的。如在2008以前的版本中是通过注册表项来实现的。而这个版本以后的都是采用XML文件来完成的。
在注册的过程中,如下几个选项要特别注意一下。一是宿主应用程序指定可以加载外接程序的应用程序的名称和版本号(注意版本号一定好对,否则的话应用系统可能无法正确激活外挂程序);二是程序集指定外接程序的二进制形式的位置,如本地路径、网络路径或者有效的URL地址等等;三是完整的类名称指定用于连接到外接程序的类的名称;四是加载行为,指定程序在启动时自动加载外接程序还是手工加载外接程序(笔者的意见是最好采取手工加载的方式进行);五是命令行安全,制定外接程序兼容的Visual Studio模式,如仅仅支持命令行、仅仅支持集成开发环境或者两个都支持等等。
在这里笔者要特别强调一下外接程序的加载行为。在Visual Studio2008种,外接程序的启动行为主要分为三种,分别为“在IDE启动时不加载外接程序,而必须手工加载(参数值为0)”、“在IDE启动时自动加载外接程序(参数值为1)”、“在从命令行用生成开关启动时加载外接程序(参数值为4)”。笔者喜欢采用的是最后一种,即在从命令行用生成开关启动时加载外接程序。如现在有一个ERP系统,其中有一项叫做“自动生成安全库存不足报表”的功能。其主要功能就是将物料的库存数量跟其设置的安全库存进行对比。如果低于安全库存的话,则会自动根据相关的规则计算需要的采购量并形成报表。但是这个功能并不一定每家企业都需要。为了提高应用程序的灵活性,比较好的做法是在应用程序前端界面中加入一个开关,让用户来判断是否需要这个功能。如果需要的话,在前台启用、并设置运行的周期即可。只有进行了设置,才会加载操作系统上的任务管理器第三方应用程序。
不同的企业对于软件有不同的要求。有时候同一企业不同的发展时期也会有不同的需求。通过“生成开关”来控制是否要加载外接程序,能够确保外接程序只有在需要的时候才会被调用。