Código transparente de segurançaSecurity-Transparent Code

Cuidado

Segurança de Acesso do Código e Código Parcialmente ConfiávelCode Access Security and Partially Trusted Code

O .NET Framework fornece um mecanismo para a imposição de níveis variáveis de confiança em códigos diferentes em execução no mesmo aplicativo chamado CAS (Segurança de Acesso do Código).The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). O CAS no .NET Framework não deve ser usado como um mecanismo de imposição de limites de segurança com base na origem do código ou em outros aspectos da identidade.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Estamos atualizando nossas diretrizes para refletir que o CAS e o Código Transparente de Segurança não terão suporte como um limite de segurança com código parcialmente confiável, especialmente o código de origem desconhecida.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Não aconselhamos carregar e executar códigos de origens desconhecidas sem a adoção de medidas de segurança alternativas no local.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Essa política é aplicável à todas as versões do .NET Framework, mas não é aplicável ao .NET Framework incluído no Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

A segurança envolve três partes interação: modo seguro, permissões e a imposição.Security involves three interacting pieces: sandboxing, permissions, and enforcement. Área restrita refere-se a prática de criar domínios isolados onde algum código é tratado como código totalmente confiável e outros é restrito às permissões na concessão definido para a área restrita.Sandboxing refers to the practice of creating isolated domains where some code is treated as fully trusted and other code is restricted to the permissions in the grant set for the sandbox. O código do aplicativo que é executado dentro do conjunto de concessão de área restrita é considerado para ser transparente; ou seja, ele não é possível executar todas as operações que podem afetar a segurança.The application code that runs within the grant set of the sandbox is considered to be transparent; that is, it cannot perform any operations that can affect security. A concessão definida para a área restrita é determinada pelo evidência (Evidence classe).The grant set for the sandbox is determined by evidence (Evidence class). Evidência identifica quais permissões específicas são necessárias por áreas restritas e quais tipos de caixas de podem ser criados.Evidence identifies what specific permissions are required by sandboxes, and what kinds of sandboxes can be created. Imposição refere-se a permitir que o código transparente executar apenas dentro de seu conjunto de concessão.Enforcement refers to allowing transparent code to execute only within its grant set.

Importante

Política de segurança foi um elemento chave em versões anteriores do .NET Framework.Security policy was a key element in previous versions of the .NET Framework. Começando com o .NET Framework 4.NET Framework 4, política de segurança é obsoleta.Starting with the .NET Framework 4.NET Framework 4, security policy is obsolete. A eliminação da política de segurança é separada da transparência de segurança.The elimination of security policy is separate from security transparency. Para obter informações sobre os efeitos dessa alteração, consulte compatibilidade de políticas de segurança de acesso do código e migração.For information about the effects of this change, see Code Access Security Policy Compatibility and Migration.

Este tópico descreve o modelo de transparência em mais detalhes.This topic describes the transparency model in more detail. Ele contém as seguintes seções:It contains the following sections:

Finalidade do Modelo de TransparênciaPurpose of the Transparency Model

Transparência é um mecanismo de imposição que separa o código que é executado como parte do aplicativo de código que é executado como parte da infraestrutura.Transparency is an enforcement mechanism that separates code that runs as part of the application from code that runs as part of the infrastructure. Transparência desenha uma barreira entre o código que pode fazer coisas privilegiadas (código crítico), como chamar código nativo e o código que não é possível (código transparente).Transparency draws a barrier between code that can do privileged things (critical code), such as calling native code, and code that cannot (transparent code). Código transparente pode executar comandos dentro dos limites do conjunto de permissões que ele esteja operando, mas não é possível executar, derivam ou conter código crítico.Transparent code can execute commands within the bounds of the permission set it is operating in, but cannot execute, derive from, or contain critical code.

O principal objetivo da imposição de transparência é fornecer um mecanismo simple e eficiente para isolar a diferentes grupos de código com base em privilégios.The primary goal of transparency enforcement is to provide a simple, effective mechanism for isolating different groups of code based on privilege. Dentro do contexto do modelo de modo seguro, esses grupos de privilégio são totalmente confiáveis (ou seja, não restritos,) ou parcialmente confiável (ou seja, restrita ao conjunto de permissões concedidas para a área restrita).Within the context of the sandboxing model, these privilege groups are either fully trusted (that is, not restricted) or partially trusted (that is, restricted to the permission set granted to the sandbox).

Importante

O modelo de transparência transcende a segurança de acesso ao código.The transparency model transcends code access security. Transparência é imposta pelo compilador just-in-time e permanece em vigor, independentemente da concessão definido para um assembly, incluindo a confiança total.Transparency is enforced by the just-in-time compiler and remains in effect regardless of the grant set for an assembly, including full trust.

Transparência foi introduzida o .NET Framework versão 2.0 para simplificar o modelo de segurança e para facilitar a gravação e implantar aplicativos e bibliotecas seguras.Transparency was introduced in the .NET Framework version 2.0 to simplify the security model, and to make it easier to write and deploy secure libraries and applications. Código transparente também é usado no Microsoft Silverlight, para simplificar o desenvolvimento de aplicativos parcialmente confiáveis.Transparent code is also used in Microsoft Silverlight, to simplify the development of partially trusted applications.

Observação

Quando você desenvolve um aplicativo parcialmente confiável, você precisa estar ciente dos requisitos de permissão para os hosts de destino.When you develop a partially trusted application, you have to be aware of the permission requirements for your target hosts. Você pode desenvolver um aplicativo que usa recursos que não são permitidos por alguns dos hosts.You can develop an application that uses resources that are not allowed by some hosts. Este aplicativo será compilado sem erro, mas falhará quando ele é carregado no ambiente hospedado.This application will compile without error, but will fail when it is loaded into the hosted environment. Se você tiver desenvolvido seu aplicativo usando o Visual Studio, você pode habilitar a depuração em confiança parcial ou em uma permissão restrita definida no ambiente de desenvolvimento.If you have developed your application using Visual Studio, you can enable debugging in partial trust or in a restricted permission set from the development environment. Para obter mais informações, consulte como: depurar um aplicativo ClickOnce com permissões restritas.For more information, see How to: Debug a ClickOnce Application with Restricted Permissions. O recurso calcular permissões fornecido para aplicativos ClickOnce também está disponível para qualquer aplicativo parcialmente confiável.The Calculate Permissions feature provided for ClickOnce applications is also available for any partially trusted application.

Voltar ao inícioBack to top

Especificando o Nível de TransparênciaSpecifying the Transparency Level

O nível de assembly SecurityRulesAttribute atributo explicitamente seleciona o SecurityRuleSet regras que segue o assembly.The assembly-level SecurityRulesAttribute attribute explicitly selects the SecurityRuleSet rules that the assembly will follow. As regras são organizadas em um sistema de nível numérico, onde os níveis mais altos significam maior imposição de regras de segurança.The rules are organized under a numeric level system, where higher levels mean tighter enforcement of security rules.

Os níveis são da seguinte maneira:The levels are as follows:

  • Nível 2 (Level2) – o .NET Framework 4.NET Framework 4 regras de transparência.Level 2 (Level2) – the .NET Framework 4.NET Framework 4 transparency rules.

  • Nível 1 (Level1) – as regras de transparência do .NET Framework 2.0.Level 1 (Level1) – the .NET Framework 2.0 transparency rules.

A principal diferença entre os níveis de duas transparência é que o nível 1 não impõe regras de transparência para chamadas de fora do assembly e é destinado somente para compatibilidade.The primary difference between the two transparency levels is that level 1 does not enforce transparency rules for calls from outside the assembly and is intended only for compatibility.

Importante

Você deve especificar a transparência de nível 1 somente para compatibilidade; ou seja, especificar o nível 1 somente para o código que foi desenvolvido com o .NET Framework 3.5 ou anterior que usa o AllowPartiallyTrustedCallersAttribute de atributo ou não usar o modelo de transparência.You should specify level 1 transparency for compatibility only; that is, specify level 1 only for code that was developed with the .NET Framework 3.5 or earlier that uses the AllowPartiallyTrustedCallersAttribute attribute or does not use the transparency model. Por exemplo, use a transparência de nível 1 para assemblies do .NET Framework 2.0 que permitem chamadas de chamadores parcialmente confiáveis (APTCA).For example, use level 1 transparency for .NET Framework 2.0 assemblies that allow calls from partially trusted callers (APTCA). Para o código desenvolvido para o .NET Framework 4.NET Framework 4, sempre use a transparência de nível 2.For code that is developed for the .NET Framework 4.NET Framework 4, always use level 2 transparency.

Transparência de nível 2Level 2 Transparency

Transparência de nível 2 foi introduzida no .NET Framework 4.NET Framework 4.Level 2 transparency was introduced in the .NET Framework 4.NET Framework 4. Os três princípios desse modelo são código transparente, código de segurança crítica segura e código crítico de segurança.The three tenets of this model are transparent code, security-safe-critical code, and security-critical code.

  • Código transparente, independentemente das permissões que é concedido (incluindo a confiança total), pode chamar somente outros código transparente ou código de segurança crítica safe.Transparent code, regardless of the permissions it is granted (including full trust), can call only other transparent code or security-safe-critical code. Se o código é parcialmente confiável, ele só pode executar ações que são permitidas pelo conjunto de permissões do domínio.If the code is partially trusted, it can only perform actions that are allowed by the domain’s permission set. Código transparente não pode fazer o seguinte:Transparent code cannot do the following:

    • Executar um Assert operação ou elevação de privilégio.Perform an Assert operation or elevation of privilege.

    • Contém o código não confiável ou.Contain unsafe or unverifiable code.

    • Chame diretamente o código crítico.Directly call critical code.

    • Chamar código nativo ou em código que tem o SuppressUnmanagedCodeSecurityAttribute atributo.Call native code or code that has the SuppressUnmanagedCodeSecurityAttribute attribute.

    • Chamar um membro que é protegido por um LinkDemand.Call a member that is protected by a LinkDemand.

    • Herda de tipos críticos.Inherit from critical types.

    Além disso, os métodos transparentes não é possível substituir métodos virtuais críticos ou implementar métodos de interface crítico.In addition, transparent methods cannot override critical virtual methods or implement critical interface methods.

  • Código de segurança crítica safe é totalmente confiável, mas pode ser chamado por código transparente.Security-safe-critical code is fully trusted but is callable by transparent code. Ela expõe uma área da superfície limitada do código de confiança total.It exposes a limited surface area of full-trust code. Verificações de integridade e segurança acontecem no código crítico para segurança.Correctness and security verifications happen in safe-critical code.

  • Código crítico de segurança pode chamar qualquer código e é totalmente confiável, mas ele não pode ser chamado por código transparente.Security-critical code can call any code and is fully trusted, but it cannot be called by transparent code.

Transparência de Nível 1Level 1 Transparency

O modelo de transparência de nível 1 foi introduzido no .NET Framework versão 2.0 para permitir que os desenvolvedores reduzir a quantidade de código que está sujeito a uma auditoria de segurança.The level 1 transparency model was introduced in the .NET Framework version 2.0 to enable developers to reduce the amount of code that is subject to a security audit. Embora a transparência de nível 1 publicamente disponível na versão 2.0, que foi usado principalmente apenas em Microsoft, para fins de auditoria de segurança.Although level 1 transparency was publicly available in version 2.0, it was primarily used only within Microsoft for security auditing purposes. Por meio de anotações, os desenvolvedores são capazes de declarar os tipos e membros podem executar elevações de segurança e outras ações confiáveis (crítico de segurança) e que não é possível (transparência de segurança).Through annotations, developers are able to declare which types and members can perform security elevations and other trusted actions (security-critical) and which cannot (security-transparent). Código que é identificado como transparente não exige um alto grau de auditoria de segurança.Code that is identified as transparent does not require a high degree of security auditing. Transparência de nível 1 indica que a aplicação de transparência é limitada a dentro do assembly.Level 1 transparency states that the transparency enforcement is limited to within the assembly. Em outras palavras, qualquer tipos públicos ou membros que são identificados como críticas de segurança são críticas de segurança somente dentro do assembly.In other words, any public types or members that are identified as security-critical are security-critical only within the assembly. Se você deseja aplicar a segurança para esses tipos e membros quando eles são chamados de fora do assembly, você deve usar as demandas de link de confiança total.If you want to enforce security for those types and members when they are called from outside the assembly, you must use link demands for full trust. Se você não fizer isso, membros e tipos de segurança crítica publicamente visíveis são tratados como safe-crítico de segurança e podem ser chamados por código parcialmente confiável fora do assembly.If you do not, publicly visible security-critical types and members are treated as security-safe-critical and can be called by partially trusted code outside the assembly.

O modelo de transparência de nível 1 tem as seguintes limitações:The level 1 transparency model has the following limitations:

  • Segurança crítica tipos e membros que são públicos são acessíveis no código transparente de segurança.Security-critical types and members that are public are accessible from security-transparent code.

  • As anotações de transparência são aplicadas apenas dentro de um assembly.The transparency annotations are enforced only within an assembly.

  • Os membros e tipos críticos de segurança devem usar demandas de link para aplicar a segurança para chamadas de fora do assembly.Security-critical types and members must use link demands to enforce security for calls from outside the assembly.

  • Regras de herança não são impostas.Inheritance rules are not enforced.

  • Existe a possibilidade de código de transparência executar ações prejudiciais quando executado em confiança total.The potential exists for transparent code to do harmful things when run in full trust.

Voltar ao inícioBack to top

Imposição de TransparênciaTransparency Enforcement

Regras de transparência não são impostas até transparência é calculada.Transparency rules are not enforced until transparency is calculated. Nesse momento, um InvalidOperationException é gerada se uma regra de transparência é violada.At that time, an InvalidOperationException is thrown if a transparency rule is violated. O tempo de transparência é calculada depende de vários fatores e não pode ser previsto.The time that transparency is calculated depends on multiple factors and cannot be predicted. Ele é calculado mais tarde.It is calculated as late as possible. No .NET Framework 4.NET Framework 4, cálculo de transparência de nível de assembly ocorre com mais rapidez do que o .NET Framework 2.0.In the .NET Framework 4.NET Framework 4, assembly-level transparency calculation occurs sooner than it does in the .NET Framework 2.0. A garantia somente é que o cálculo de transparência ocorrerá no momento em que ela for necessária.The only guarantee is that transparency calculation will occur by the time it is needed. Isso é semelhante a como o compilador just-in-time (JIT) pode alterar o ponto quando um método é compilado e quaisquer erros no método são detectados.This is similar to how the just-in-time (JIT) compiler can change the point when a method is compiled and any errors in that method are detected. Cálculo de transparência é invisível se seu código não tem erros de transparência.Transparency calculation is invisible if your code does not have any transparency errors.

Consulte tambémSee Also

Código transparente de segurança, nível 1Security-Transparent Code, Level 1
Código transparente de segurança, nível 2Security-Transparent Code, Level 2