Clique aqui para ler todos os artigos desta edição
Protegendo e implantando soluções de negócios no Microsoft Visual Studio Tools for Office
por: Brian A. Randell e Ken Getz
O Microsoft Visual Studio Tools para o Microsoft Office System é uma nova tecnologia que traz os recursos avançados do Visual Studio .NET e do .NET Framework para aplicativos criados para Microsoft Office Word 2003 e Microsoft Office Excel 2003. Desenvolver soluções criadas com essa tecnologia requer que você compreenda como a segurança do runtime é reforçada nos aplicativos gerenciados e como configurar sistemas de usuários para executar suas soluções sem introduzirem falhas na segurança. Este artigo demonstrará como estabelecer confiança, descreverá considerações e permissões de segurança, explicará a função do código confiável e a implantação de um assembly seguro.
No artigo da edição de novembro de 2003 da MSDN® Magazine Brasil, mostramos como o Microsoft® Visual Studio® Tools for Microsoft Office System facilita criar soluções document-centric para Microsoft Excel 2003 e Word 2003 usando código gerenciado. Desde que você começasse do nada e permitisse que o New Project Wizard fizesse o trabalho “sujo”, as coisas funcionavam perfeitamente. No entanto, no momento em que você movia seu documento e o assembly para um novo diretório ou computador, nada mais funcionava. Para entender por que, você precisa estar familiarizado com o CAS (Code Access Security) do Microsoft .NET Framework. O CAS permite que você tire proveito de um dos recursos mais irresistíveis do Visual Studio Tools for Office, a capacidade de fazer com que um documento consuma um assembly compartilhado que possa ser atualizado sem que seja necessário implantá-lo em cada desktop. Além disso, você precisará saber como compartilhar seu código com outros desenvolvedores. Você precisará ser um membro do grupo de administradores locais (local Administrators group) ou de um grupo de usuários avançados (Power Users group) para alterar a política de segurança do runtime.
No artigo de novembro de 2003, apontamos algumas razões por que os desenvolvedores deveriam se interessar pelo Visual Studio Tools for Office. Duas delas merecem ser repetidas e constituem o foco deste artigo. Em primeiro lugar, os desenvolvedores podem tirar proveito do CAS que é incluído no CLR (common language runtime). Diferentemente das macros Visual Basic® for Applications, o código gerenciado simplesmente não funcionará a não ser que seja explicitamente confiável. A política padrão impede que o assembly seja executado e protege usuários contra vírus e outros códigos maliciosos. Antes que os usuários possam carregar um documento com extensões de código gerenciado, o administrador precisará conceder explicitamente confiança total ao assembly correspondente ou à sua localização. Segundo, os desenvolvedores que utilizam Visual Studio Tools for Office podem tirar proveito da distribuição no-touch. Os usuários podem receber automaticamente atualizações no aplicativo sem intervenção de desenvolvedores ou administradores.
Figura 1 Não é possível encontrar o assembly (Can’t Find Assembly)
É ótimo compartilhar
Mesmo que programe para si próprio, freqüentemente você precisa mover uma solução de uma máquina para outra ou mesmo de um diretório para outro. A primeira coisa da qual você deve estar a par é que, para fins de depuração (debugging), cada projeto tem informações inseridas no código sobre o local onde o aplicativo host (Excel 2003 ou Word 2003) foi instalado. A segunda questão preocupante envolve a segurança.
Para acompanhar a discussão neste artigo, inicie o Visual Studio .NET 2003 e crie um novo projeto Microsoft Office System. Para nosso teste, criamos um projeto Visual Basic .NET usando uma nova pasta de trabalho Excel 2003 (Excel 2003 workbook). Nomeie seu projeto como VSTOXLVB. Caso não saiba como criar o projeto, consulte nosso artigo na edição de novembro de 2003 da MSDN Magazine Brasil.
Neste ponto, você terá um projeto novo, pronto para ser trabalhado. Se pressionar F5 no Visual Studio, você obterá um assembly compilado que será automaticamente carregado quando o Excel 2003 carregar sua pasta de trabalho (workbook). Fechar o Excel 2003 descarrega o assembly e fecha o documento. Se você compartilhar essa solução com outro desenvolvedor, é possível que ele precise modificar uma configuração do projeto. De volta ao Visual Studio, você pode localizar essa configuração clicando com o botão direito do mouse no projeto da janela Solution Explorer, selecione o folder Configuration Properties e, em seguida, o nó Debugging. Na folha de propriedades, você verá a opção “Start external program” selecionada. Na textbox ao lado dela, estará listado o caminho completo para o Excel 2003 em seu computador. Se você tem o Excel 2003 instalado na unidade C: de seu computador, mas seu colega de trabalho instalou o programa na unidade D:, será necessário alterar a opção para que ele possa depurar o aplicativo localmente. Agora que o Visual Studio .NET pode encontrar o Excel 2003, você precisa lidar com as implicações relacionadas à segurança.
No seu computador de desenvolvimento, use o Windows® Explorer para copiar o arquivo do documento e o novo assembly recém-compilado para outro diretório do computador. Por padrão, o documento host (neste caso, VSTOXLVB.xls) está localizado no mesmo diretório que o arquivo da solução (solution) de seu Visual Studio .NET. O assembly está armazenado em dois locais: na pasta bin e na pasta VSTOXLVB_bin, ambas encontradas abaixo da pasta da solução. Copie os dois arquivos para o mesmo novo diretório. Abra o arquivo VSTOXLVB.xls diretamente do Windows Explorer. O primeiro problema que você verá é que o carregador (loader) não conseguirá encontrar o assembly, mesmo este estando no mesmo diretório da pasta de trabalho do Excel 2003 (workbook). Você receberá um erro semelhante ao da caixa de diálogo exibida na Figura 1.
Conforme mencionado no artigo de novembro 2003, o documento host foi modificado para que contivesse duas propriedades auxiliares (helper): _AssemblyName0 e _AssemblyLocation0. As propriedades são usadas pela DLL do carregador do Visual Studio Tools for Office, OTKLOADR.DLL, para localizar o assembly. No Excel 2003, com o documento VSTOXLVB.xls carregado, selecione File | Properties para exibir a caixa de diálogo Document Properties. Na guia Custom, altere a propriedade _AssemblyLocation0 para um ponto, a fim de indicar que o carregador deve procurar o assembly dentro da pasta atual. Salve o documento, feche-o e abra-o novamente no Excel 2003. Desta vez, você obterá uma mensagem de erro diferente, como a que segue:
A atual política de segurança do .NET (.NET security policy) não permite que VSTOXLVB seja executado na pasta .\ . Não altere a política de segurança do seu computador. A política de segurança do .NET é controlada pelo administrador ou desenvolvedor que escreveu as macros personalizadas. Você ainda pode editar e salvar o documento. Contate o administrador ou o autor deste documento para auxílio adicional.
Estabelecendo confiança
Por padrão, o carregador do Visual Studio Tools for Office só carrega os assemblies que recebem explicitamente confiança total. Se mover o assembly, você o removerá de uma localização confiável. Existem três níveis de confiabilidade disponíveis no Microsoft .NET Framework: total, parcial e não-confiável. A não ser que especificado de outra maneira, o carregador do Visual Studio Tools for Office considera todos os assemblies gerenciados como não-confiáveis. Além disso, ele carrega apenas os assemblies que receberam o nível de confiabilidade total. O carregador do Visual Studio Tools for Office não suporta cenários de confiança parcial porque a interação com o host (Excel 2003 ou Word 2003) requer interoperabilidade COM e, desse modo, o CLR não pode verificar se todo o código executado é seguro.
Para conceder confiança, você precisará investigar as ferramentas do .NET Framework que possibilitam a criação e o gerenciamento de políticas de segurança. Você pode fazer isso de três maneiras diferentes: por linha de comando, usando CASPOL.EXE; por meio de ferramentas GUI administrativas; ou de forma programática. Nós usamos ferramentas GUI.
Feche o Excel 2003 (e exclua as versões copiadas de seu documento e assembly). Abra o snap-in Configuration MMC do Microsoft .NET Framework 1.1. Entre outras coisas, essa ferramenta de configuração lhe permite gerenciar a política de segurança do runtime para código gerenciado em seu computador. Iniciando pelo nó Runtime Security Policy, expanda o nó User, depois o nó Code Groups e, por fim, o nó All_Code. No grupo All_Code, encontre o nó Office_Projects. Você verá uma entrada exclusiva para cada documento de cada solução do Excel 2003 ou Word 2003 criada até aqui.
Figura 2 Diretório de teste
A Figura 2 mostra um computador de teste após a criação do exemplo deste artigo.
Essas entradas informam ao carregador qual código é confiável e permitem que você escreva, depure e execute seu código no seu computador de desenvolvimento. O código só será executado se for carregado na localização exata que você especificou ao criar o projeto. Para facilitar as coisas, o Office Project Wizard modifica a política de segurança de seu runtime local e adiciona uma política que concede ao assembly os direitos de que ele necessita para ser executado. Essa etapa só ocorre em computadores de desenvolvimento. Para fazer com que as coisas funcionem nos computadores de seus usuários ou no computador de outro desenvolvedor, você precisará modificar a política de segurança do runtime do computador de destino.
Política, evidência, permissões e grupos de códigos
O runtime do .NET (o CLR) possui uma política de segurança bem definida para código gerenciado. A política de segurança do runtime define permissões e permite que o CLR tome decisões sobre o que o código tem permissão para fazer. As permissões concedem acesso a recursos (tais como arquivos, bancos de dados etc) e permitem que o código execute alguma ação (como, por exemplo, chamar componentes COM). As políticas permitem que o CLR seja proativo em proteger seus recursos.
O CLR usa diversos critérios, chamados de evidência, para tomar as decisões sobre permissão. A evidência pode ser a URL a partir do qual o código é carregado, uma criptografia hash baseada no assembly propriamente dito, ou informações sobre o autor do código.
Seja qual for a evidência, o CLR precisa de uma forma para fazer a correspondência com um conjunto de permissões — ou seja, um agrupamento lógico de permissões. Essa verificação é obtida através de grupos de código e de condições de afiliação. Um grupo de código consiste em um agrupamento lógico de código que corresponde a uma condição de usuário especificada, que por sua vez é uma estipulação do que deve ser feito para que um assembly seja afiliado a um grupo de código. Cada grupo de código é associado a um conjunto de permissões específico.
A política de segurança do runtime é dividida em quatro níveis: Enterprise, Machine, User e AppDomain. Todos eles, exceto AppDomain, podem ser gerenciados visualmente por meio do snap-in Configuration MMC do Microsoft .NET Framework 1.1, mostrado na Figura 2. Cada nível da política contém um ou mais grupos de código, aninhados em uma hierarquia. Em tempo de execução, o CLR avalia todas as evidências disponíveis para identificar de quais grupos de código o assembly é membro. Em seguida, ele concede ao assembly as permissões especificadas pelo tipo de afiliação (membership).
As coisas se tornam mais interessantes quando você começa a investigar a maneira como os documentos do Office 2003 que usam extensões de código gerenciado incorporam esses recursos de segurança. Por padrão, os níveis Enterprise e User contêm apenas um grupo de código cada: All_Code. O grupo All_Code tem uma condição de afiliação de All Code com o conjunto de permissões FullTrust. Todas as políticas interessantes são definidas no nível Machine, que fornece um conjunto de grupos de códigos que restringe o que o código pode fazer com base principalmente nas condições do Zone membership. As zonas usadas como condições de afiliação nos grupos de código padrão mapeiam para as zonas usadas pelo Microsoft Internet Explorer: Internet, Local Intranet, Trusted sites e Restricted sites. Elas são definidas como Internet, Local Intranet, Trusted Sites e Untrusted Sites, respectivamente, na política de segurança do runtime. Além disso, a Microsoft fornece uma zona My Computer para as unidades de disco rígido locais.
Os níveis de política são avaliados em conjunto entre si. Desse modo, as permissões fornecidas a um assembly são baseadas na interseção das condições de afiliação (membership) do assembly. Todos os níveis de política precisam concordar em relação aos direitos que concedem. Se o nível de política Machine nega explicitamente direitos de execução a um código proveniente da Internet, o nível de política Enterprise não pode conceder explicitamente essa permissão. Se examinar o nível de política Machine de sua máquina, você verá que todo aquele código executado na zona My Computer roda com confiança total (full trust). No entanto, conforme mostrado anteriormente, quando você copiou seu arquivo .xls e o assembly para um novo diretório, eles não rodaram. Por que não?
Embora existam quarto níveis de política (Enterprise, Machine, User e AppDomain), o carregador do Visual Studio Tools for Office aplica a política AppDomain em tempo de execução. Por exemplo, o Visual Studio Tools for Office não aceita afiliações confiáveis na zona My Computer. Seu assembly precisa fornecer alguma outra evidência que corresponda a um código de grupo que forneça confiança total. O que ocorre é que existem muitos tipos de evidência que você seleciona quando modifica uma política. Você pode escolher dentre as seguintes opções: All Code, Application Directory, Hash, Publisher, Site, Strong Name, URL, Zone e Custom.
Como o carregador do Visual Studio Tools for Office não aceita evidência de zona, você precisa usar alguma outra coisa. Pense nisso desta maneira: se você quiser alugar um vídeo em uma locadora e pagar em dinheiro, seu cartão de afiliação seria bom o bastante. Mas se você quisesse comprar 20 DVDs e pagar com cartão de crédito, a locadora exigiria sua carteira de identidade. São dois tipos de evidência, com dois níveis diferentes de confiança.
Na primeira vez que você criar um projeto Visual Studio Tools for Office em seu computador, o assistente adicionará um grupo de código Office_Projects com uma condição de afiliação de All Code para o nível User Policy. Em seguida, para cada solução adicional que você criar no Microsoft Office Project Wizard, o Visual Studio .NET definirá um novo grupo de código abaixo do grupo Office_Projects. O novo grupo é um grupo hierárquico com dois níveis. O primeiro nível usa o caminho completo de seu assembly (excluindo o nome do assembly). O segundo grupo de código usa o caminho completo de seu assembly, incluindo o nome do assembly (conforme mostrado na Figura 2).
Ambos os grupos usam a condição de afiliação de URL (URL membership), que permite que o código seja executado com base em sua localização. O primeiro nível atribui o conjunto de permissões Execute ao grupo de código. O segundo nível atribui o conjunto de permissões FullTrust ao grupo de código, que possui uma condição de afiliação para o assembly específico que você criou quando compilou o projeto. Esse ajuste à política de segurança do runtime permite que você pressione F5 e execute o projeto sem precisar modificar por conta própria as políticas CAS. Ele satisfaz o carregador (loader) do Visual Studio Tools for Office na medida em que fornece evidência adicional — neste caso, a evidência de URL, verificando se seu assembly é confiável para ser carregado em um host do Office 2003.
Você deve se perguntar por que existe segurança em dois níveis dentro do sistema de arquivos. Afinal, se você foi solicitado a conceder ao assembly direitos de FullTrust para que ele fosse executado, por que a política permite a execução de outro código no mesmo diretório? Existem duas razões. Em primeiro lugar, permitir que assemblies satélites que contenham recursos como tabelas de strings localizadas possam ser carregadas. Em segundo lugar, permitir que você faça referência a outros assemblies na mesma pasta, de modo que eles possam ao menos ser carregados e executados. Se os assemblies separados tentarem fazer qualquer coisa que requeira mais que uma simples execução (tal como acessar um arquivo) e você não tiver concedido permissão para isso (através de um grupo de código), eles falharão. Isso significa que qualquer código que você deseje usar como parte de uma solução Visual Studio Tools for Office (exceto código com o strong name Microsoft ou ECMA) deve atender à condição de afiliação de algum grupo de código (diferente de My_Computer_Zone) e esse grupo de código deve conceder direitos FullTrust.
Código de confiança
Neste ponto, talvez você já tenha tramado uma solução simples para o problema de mover o código de um local para outro: você poderia atribuir direitos FullTrust usando evidência de URL a toda a sua unidade C:\ e acabar com o problema de uma vez por todas! Mas isso seria realmente uma idéia muito, muito ruim. Imagine, por exemplo, o que aconteceria se você baixasse um assembly de um website que contivesse códigos maliciosos. Como a sua pasta temporary Internet folder está provavelmente em algum lugar de sua unidade C:\, você acabou de conceder ao assembly direitos de fazer a maldade para a qual ele foi originalmente criado.
Existem muitas maneiras de atribuir confiança a um código, e o mecanismo que você escolher em seu computador de desenvolvimento deverá ser mais uma questão de conveniência do que qualquer outra coisa. Quando se trata de instalação, no entanto, você deverá fazer o que for melhor para os usuários. Isso exige que você selecione evidências mais seguras, como certificados X.509 ou strong names.
Ao usar certificados ou arquivos de chave, é recomendável como melhor prática que você proteja suas versões. Na hora de publicar o código, deverá haver algum processo out-of-band por meio do qual apenas os membros confiáveis de sua organização possam assinar o código. No caso do desenvolvimento, você tem duas opções. A primeira é definir um arquivo de chave com strong name que você use em seu computador. Se você tiver uma equipe trabalhando no projeto, só precisará de um arquivo de chave. O ponto importante é que esse arquivo de chave é usado para assinar código apenas para fins de teste ou desenvolvimento. No caso do release, você assina o código novamente usando um arquivo de chave diferente. A segunda opção é usar delay signing. Quando um assembly usa delay signing em tempo de criação, o espaço é reservado no arquivo PE (portable executable) para a assinatura de strong name, mas a assinatura real é adiada até um estágio posterior.
Você cria arquivos de chave usando o utilitário Strong Name do .NET Framework, sn.exe, fornecido com o .NET Framework SDK e com o Visual Studio .NET. Continuando com o exemplo anterior, abra o Prompt de comando do Visual Studio .NET 2003 e altere para um diretório onde você prefira armazenar o arquivo de chave. Para este exemplo, vamos colocá-lo na pasta C:\TestKeys. Nessa pasta, digite “sn -k vsto_dev.snk” e pressione Enter. Observe que todas as chaves usadas pelo utilitário Strong Name fazem distinção entre maiúsculas e minúsculas (case sensitive).
Antes de prosseguir, você deve fazer backup de suas configurações de segurança. Seus arquivos de política Enterprise e Machine são armazenados no diretório Windows Drive:\Windows Directory\Microsoft.NET\Framework\v1.1.4322\CONFIG, em dois arquivos XML: enterprisesec.config e security.config. O arquivo de política de usuário é chamado security.config e está armazenado em um local específico ao usuário. Em nosso computador de teste, executando Windows XP Professional SP1 e conectado como Administrator, o arquivo de política User é armazenado no C:\Documents and Settings\Administrator\Application Data\Microsoft\CLR Security Config\v1.1.4322. Lembre-se sempre de fazer backup desses três arquivos antes de começar a modificar suas configurações de segurança.
Uma vez feito backup desses arquivos, retorne ao .NET Framework 1.1 Configuration snap-in e exclua o grupo de código que lista apenas o caminho para sua solução. Esse procedimento, por sua vez, excluirá o grupo de código-filho do assembly. Certifique-se de que não possa mais executar ou depurar a solução. Você deve receber a mesma mensagem de erro de política de segurança do .NET descrita anteriormente.
E como você pode executar o aplicativo sem a política baseada em URL? Simples. Você adicionará agora suporte para uso de um strong name como evidência de seu assembly. Retorne ao Visual Studio .NET e abra o arquivo AssemblyInfo.vb. Adicione o seguinte atributo AssemblyKeyFile abaixo do número da versão, de modo que, quando seu assembly for compilado, ele utilize um strong name:
‘ Visual Basic
// C#
[assembly: AssemblyKeyFile(@”c:\testkeys\vsto_dev.snk”)]
Incluímos o código C# para mais abrangência. Se você estiver criando uma solução em C#, o arquivo AssemblyInfo.cs já conterá o atributo; você só precisa preencher o caminho.
Recompile a solução e retorne ao .NET Framework 1.1 Configuration MMC snap-in. De modo geral, você deseja definir suas políticas no nível do computador. Isso permite que você, como o Administrador local, defina a política que poderá então ser testada por meio de uma conta não administrativa.
Começando pelo nó Runtime Security Policy, expanda o nó Machine, depois o nó Code Groups e, por fim, o nó All_Code. No grupo All_Code, encontre o nó My_Computer_Zone. Clique com o botão direito em My_Computer_Zone e selecione New para iniciar o Create Code Group Wizard.
No campo Name, digite “VSTO_Dev”. Caso deseje, preencha o campo Description e clique em Next. Na página Choose a Condition Type, escolha Strong Name na combobox Condition type. Escolher uma opção de Strong Name altera a página para que você possa importar a chave pública de seu assembly compilado. Clique em Import e na caixa de diálogo do arquivo exibido, navegue até o subdiretório que contém o assembly assinado. Selecione-o e clique em OK.
Embora esta página lhe ofereça a opção de atribuir confiança a qualquer versão desse assembly específico, ou apenas em uma versão específica, você deseja que qualquer código que seja assinado com sua chave de teste seja confiável, então clique em Next. Na página Assign a Permission to the Code Group, verifique se FullTrust está marcado na combobox Use existing permission, clique em Next e, em seguida, clique em Finish na última página. Neste ponto, você deve abrir o documento do Excel 2003 e verificar se ele abre sem erros.
Pelo fato de ter atribuído um strong name ao seu assembly e ter criado uma política de acesso a código que permite que qualquer assembly com esse strong name seja executado, você poderá agora mover os projetos em seu computador sem se preocupar com essas questões de segurança. Se criar um novo projeto, você precisará assiná-lo com o mesmo arquivo de chave usado na criação de sua política. Naturalmente, você pode ter vários grupos de código representando diferentes strong names.
Uma última observação sobre o desenvolvimento: ao criar novos projetos, você pode selecionar a opção Security Settings e desmarcar a opção de atualização da política de segurança local, a fim de que o assistente não configure uma política baseada em URL que permita que seu projeto seja executado automaticamente (veja a Figura 3). Nesse caso, você pode adicionar o atributo AssemblyKeyFile por conta própria. Se você estiver trabalhando em um ambiente de equipe, será menos trabalhoso se todos usarem o mesmo arquivo de chave, especialmente se você puder criar um script que use CASPOL.EXE para configurar essas configurações e, em seguida, distribuir esse script para todos os integrantes da equipe.
Figura 3 Desativando a opção de segurança padrão
Modelos de implantação para usuários
Você sabe como mover o código em seu computador e compartilhá-lo com outros desenvolvedores, mas e seus usuários? Como eles farão para localizar seu aplicativo? Existem três maneiras de implantar uma solução criada com o Visual Studio Tools for Office:
• Assembly na rede, documento no computador local
• Assembly e documento no computador local
• Assembly na rede, documento na rede
Todas as três opções requerem alterações na política de segurança do runtime local do usuário. Além disso, se o documento host for carregado diretamente de um compartilhamento de rede, ele deverá ser explicitamente confiável também. Por fim, não se esqueça de que a instalação de qualquer solução criada com o Visual Studio Tools for Office requer que os seguintes itens sejam instalados em todos os computadores:
• Microsoft .NET Framework 1.1
• Microsoft Office Word 2003 e/ou Excel 2003
Cada opção de implantação tem suas vantagens e desvantagens. As escolhas para a sua solução e para os ajustes de políticas de segurança de runtime podem variar da distribuição do aplicativo em disquetes e da instalação manual destes em cada computador cliente individual à distribuição de arquivos em lote (batch) que invocam CASPOL.EXE, ou às distribuiçõs completas de setups usando arquivos *.msi padrão e objetos do Active Directory® Group Policy. Dito isso, os administradores de sua rede devem decidir o que funciona melhor para eles.
Opções de instalação para usuário
A instalação do assembly em uma localização compartilhada (acessada por meio de protocolos HTTP ou de arquivo) é uma opção popular. Depois que os usuários configurarem as políticas de segurança corretamente, eles poderão executar documentos do Excel 2003 ou do Word 2003 e receber a última versão do assembly sem saber que estão recuperando uma nova cópia. Além disso, até mesmo os usuários móveis poderão usar esse recurso, desde que eles executem a solução ao menos uma vez, porque o carregador do Visual Studio Tools for Office (via CLR) copia o assembly para o cache do assembly off-line depois que ele foi baixado para o cache do Internet Explorer. Para trabalhar off-line, o usuário precisa abrir o Internet Explorer e indicar que deseja trabalhar desconectado. Se o usuário limpar o cache de download do Internet Explorer, a solução não será carregada.
Modificar a política de segurança do runtime do usuário para que o código baixado seja executado é um pouco mais complicado. Caso esteja usando uma localização intranet (independentemente do protocolo usado para localizar o assembly), siga as etapas descritas anteriormente e coloque o grupo de código-filho abaixo do nó LocalIntranet_Zone, em vez de sob o nó My_Computer_Zone.
Naturalmente, você deve usar um strong name de produção (no lugar de uma versão de teste) para seus usuários, como fizemos anteriormente neste artigo. Além de atribuir um strong name ao assembly, você pode querer usar um certificado X.509 (do tipo usado na assinatura Authenticode) e uma assinatura Publisher como a evidência. Embora o uso de strong names ou de certificados X.509 seja mais seguro porque ambos dependem de assinaturas criptografadas (significativamente mais difíceis de falsificar do que evidências de Site ou de URL simples), a evidência Publisher fornece a vantagem adicional de informar quem criou o código. Em contrapartida, os strong names são totalmente anônimos. Somente através de técnicas out-of-band você será capaz de verificar se um strong name vem de um publisher específico.
Caso o assembly precise ser acessado sobre HTTP por meio de um endereço (endereço IP ou entrada DNS como msdn.microsoft.com), você precisará aumentar o grupo de código do Internet_Zone do usuário ou criar um novo grupo de código. Embora você possa autorizar a execução de código a partir de qualquer local da Internet com seu strong name (ou assinatura X.509), geralmente é melhor criar um grupo de código especial com uma condição de afiliação que corresponda apenas ao seu site. Isso reduz a possibilidade de ataque para os usuários mal-intencionados.
Em nosso computador de teste, criamos um grupo de código no mesmo nível de My_Computer_Zone. Atribuímos a ele o nome msdn.microsoft.com, definimos sua condição de afiliação (membership) para usar evidência de Site, definimos o nome do site como msdn.microsoft.com e definimos o conjunto de permissões como Nothing. Faça a mesma coisa em seu computador, mas substitua msdn.microsoft.com pelo site de sua empresa. Da mesma maneira como adicionou um grupo de código filho à My_Computer_Zone, você desejará criar um grupo-filho abaixo do grupo de código de site criado no setup anterior. Use sua assinatura Publisher ou strong name para a condição de afiliação e atribua FullTrust como o conjunto de permissões. A Figura 4 mostra nosso computador de teste configurado para suportar nosso strong name de produção a partir de My_Computer_Zone, LocalIntranet_Zone e msdn.microsoft.com (que usa evidência de Site). Neste exemplo, escolhemos atualizar o nível de política Machine. Você pode escolher qualquer um dos três níveis, de acordo com suas necessidades.
Se escolher instalar tanto o assembly como o documento nos computadores dos usuários, você precisará atualizar a política local deles. A vantagem de dar ao usuário tanto os documentos como o assembly é que ele não terá problemas relacionados ao uso on-line versus off-line. Dito isto, se precisar implantar uma versão atualizada de seu assembly, você deverá distribuí-la ao computador de cada usuário.
A última opção permite que o usuário execute tanto o documento host como o assembly a partir de uma localização de rede. Para executar o assembly, você precisará configurar a política de runtime do usuário, conforme discutido anteriormente. Há uma etapa adicional: executar o documento do Office 2003 remotamente requer que você instale uma DLL especial (msosec.dll) no Global Assembly Cache do usuário. Uma vez feito isso, crie dois grupos de código personalizados. O grupo pai (superior) é a localização que você deseja tornar confiável usando evidência de URL ou Site. O segundo grupo usa uma condição de afiliação personalizada definida no arquivo msosec.xml. Você encontrará detalhes passo a passo sobre essa condição na documentação do Visual Studio Tools for Office. Essas explicações estão além do escopo deste artigo. Quanto terminar as etapas, você poderá executar tanto o documento como o assembly a partir de um compartilhamento de arquivos ou no servidor Microsoft SharePoint™ Services, por exemplo.
Figura 4 Suportando múltiplas localizações
Segurança é vital
Vale a pena todo esse esforço? Com certeza. Você se lembra da dor e do sofrimento causados pelo vírus Melissa às comunidades do Office e do Windows? O Microsoft Office 2003 é uma excelente plataforma para a criação de soluções, mas todo mundo precisa ter cuidado com o próximo Melissa. Ao criar um ambiente que só permita execução de códigos explicitamente confiáveis, estaremos todos mais bem protegidos. O Visual Studio Tools for Office, juntamente com o Office 2003 e com o .NET Framework 1.1, fornece uma plataforma sólida e mais segura para criação de soluções irresistíveis centradas em documentos baseados em Excel 2003 e Word 2003.
Brian A. Randell é consultor-sênior para a MCW Technologies e instrutor da DevelopMentor. Brian palestra freqüentemente nas conferências da VSLive! e Tech—Ed. É também co-autor do livro Effective Visual Basic (Addison-Wesley, 2001).
Ken Getz (keng@mcwtech.com) é consultor-sênior da MCW Technologies. Ken é co-autor do ASP.NET Developer’s Jumpstart (Addison-Wesley, 2002), Access Developer’s Handbook (Sybex, 2001) e VBA Developer’s Handbook, 2nd Edition (Sybex, 2001).