Esta página foi útil?
Seus comentários sobre este conteúdo são importantes. Queremos saber sua opinião.
Comentários adicionais?
1500 caracteres restantes
Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Segurança parcialmente confiável do WPF

In general, Internet applications should be restricted from having direct access to critical system resources, to prevent malicious damage. By default, HTML and client-side scripting languages are not able to access critical system resources. Because Windows Presentation Foundation (WPF) browser-hosted applications can be launched from the browser, they should conform to a similar set of restrictions. To enforce these restrictions, WPF relies on both Segurança de Acesso de Código (CAS) and ClickOnce (see Estratégia de segurança do WPF - segurança da plataforma). Por padrão, os aplicativos hospedados em navegador solicitam a zona da Internet CAS conjunto de permissões, independentemente de ter se eles são iniciados a partir da Internet, intranet local ou o computador local. Applications that run with anything less than the full set of permissions are said to be running with partial trust.

WPF provides a wide variety of support to ensure that as much functionality as possible can be used safely in partial trust, and along with CAS, provides additional support for partial trust programming.

Este tópico contém as seguintes seções:

A tabela a seguir lista os recursos de alto nível das Windows Presentation Foundation (WPF) que são seguros usar dentro dos limites do conjunto de permissões da zona de Internet.

Table 1: WPF Features that are Safe in Partial Trust

Feature Area

Característica

Geral

Browser Window

Site of Origin Access

IsolatedStorage (512KB Limit)

UIAutomation Providers

Commanding

Editores de Método de Entrada (IME)

Tablet Stylus and Ink

Simulated Drag/Drop using Mouse Capture and Move Events

OpenFileDialog

XAML Deserialization (via XamlReader.Load)

Web Integration

Browser Download Dialog

Top-Level User-Initiated Navigation

mailto:links

Uniform Resource Identifier Parameters

HTTPWebRequest

WPF Content Hosted in an IFRAME

Hospedagem de páginas de HTML do mesmo Site usando o quadro

Hospedagem de páginas de HTML do mesmo Site usando o WebBrowser

Web Services (ASMX)

Web Services (using Windows Communication Foundation)

Scripting

Document Object Model

Visuals

2D e 3D

Animação

Media (Site Of Origin and Cross-Domain)

Imaging/Audio/Video

Reading

FlowDocuments

Documentos XPS

Embedded & System Fonts

CFF & TrueType Fonts

Edição

Spell Checking

RichTextBox

Plaintext and Ink Clipboard Support

User-Initiated Paste

Copying Selected Content

Controles

General Controls

This table covers the WPF features at a high level. For more detailed information, the Windows Software Development Kit (SDK) documents the permissions that are required by each member in WPF. Além disso, os recursos a seguir possuem informações mais detalhadas sobre a execução de confiança parcial, incluindo considerações especiais.

A tabela a seguir descreve o WPF conjunto de permissões da zona de recursos que não são seguros para execução dentro dos limites da Internet.

Table 2: WPF Features that are Not Safe in Partial Trust

Feature Area

Característica

Geral

Window (Application Defined Windows and Dialog Boxes)

SaveFileDialog

Sistema de arquivos

Acesso ao Registro

Drag and Drop

XAML Serialization (via XamlWriter.Save)

UIAutomation Clients

Source Window Access (HwndHost)

Full Speech Support

Windows Forms Interoperability

Visuals

Bitmap Effects

Image Encoding

Edição

Rich Text Format Clipboard

Full XAML support

Para XBAP aplicativos, o código que excede o conjunto de permissões padrão terá um comportamento diferente dependendo da zona de segurança. Em alguns casos, o usuário receberá um aviso quando eles tentam instalá-lo. O usuário pode optar por continuar ou cancelar a instalação. A tabela a seguir descreve o comportamento do aplicativo para cada zona de segurança e o que você precisa fazer para o aplicativo receber confiança total.

Zona de segurança

Comportamento

Obtendo a confiança total

Computador local

Confiança total automática

Nenhuma ação é necessária.

Intranet e sites confiáveis

Prompt para confiança total

Assine XBAP com um certificado para que o usuário vê a fonte no prompt.

Internet

Falha com "Confiança não concedida"

Assine um XBAP com um certificado.

Observação Observação

O comportamento descrito na tabela anterior é de confiança total XBAPs que não seguem o modelo de implantação confiável de ClickOnce.

Em geral, o código que pode exceder as permissões concedidas provavelmente será o código comum compartilhado entre autônomos e aplicativos hospedados em navegador. CASe WPF oferecem várias técnicas para gerenciar esse cenário.

Aa970910.collapse_all(pt-br,VS.110).gifDetecting Permissions Using CAS

In some situations, it is possible for shared code in library assemblies to be used by both standalone applications and XBAPs. In these cases, code may execute functionality that could require more permissions than the application's awarded permission set allows. Your application can detect whether or not it has a certain permission by using Microsoft .NET Framework security. Specifically, it can test whether it has a specific permission by calling the Demand method on the instance of the desired permission. This is shown in the following example, which has code that queries for whether it has the ability to save a file to the local disk:


using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission, IsolatedStorageFileStream
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

namespace SDKSample
{
    public class FileHandling
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                MessageBox.Show("I can't write to local disk.");
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }



...


    }
}


Se um aplicativo não tem a permissão desejada, a chamada para Demand lançará uma exceção de segurança. Caso contrário, a permissão foi concedida. IsPermissionGrantedencapsula esse comportamento e retorna true ou false conforme apropriado.

Aa970910.collapse_all(pt-br,VS.110).gifGraceful Degradation of Functionality

Being able to detect whether code has the permission to do what it needs to do is interesting for code that can be executed from different zones. While detecting the zone is one thing, it is far better to provide an alternative for the user, if possible. For example, a full trust application typically enables users to create files anywhere they want, while a partial trust application can only create files in isolated storage. Se o código para criar um arquivo existe em um assembly que é compartilhado por aplicativos de confiança total (autônomo) e aplicativos de confiança parcial (hospedado no navegador), e ambos os aplicativos que os usuários possam criar arquivos, o código compartilhado deve detectar se ele está sendo executado em confiança parcial ou completa antes de criar um arquivo no local apropriado. O código a seguir demonstra a ambos.


using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

namespace SDKSample
{
    public class FileHandlingGraceful
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                // Persist application-scope property to 
                // isolated storage
                IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
                using (IsolatedStorageFileStream stream = 
                    new IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to Isolated Storage");
                }
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }



...


    }
}


In many cases, you should be able to find a partial trust alternative.

In a controlled environment, such as an intranet, custom managed frameworks can be installed across the client base into the cache de assembly global (GAC). Essas bibliotecas podem executar o código que requer confiança total e ser acessadas a partir de aplicativos que são permitidos apenas parcialmente confiáveis usando AllowPartiallyTrustedCallersAttribute (para obter mais informações, consulte Segurança (WPF) e Estratégia de segurança do WPF - segurança da plataforma).

Aa970910.collapse_all(pt-br,VS.110).gifBrowser Host Detection

Using CAS to check for permissions is a suitable technique when you need to check on a per-permission basis. Embora, essa técnica depende capturar exceções como parte normal processamento, que não é recomendado em geral e pode ter problemas de desempenho. Em vez disso, se sua aplicativo de navegador XAML (XBAP) só é executado em modo seguro da zona da Internet, você pode usar o BrowserInteropHelper.IsBrowserHosted propriedade, que retorna true para aplicativos de navegador XAML (XBAPs).

Observação Observação

IsBrowserHosted distingue somente se um aplicativo é executado em um navegador, não qual conjunto de permissões de um aplicativo está sendo executado com.

Por padrão, XBAPs executado com confiança parcial (conjunto de permissões de zona de Internet do padrão). However, depending on the requirements of the application, it is possible to change the set of permissions from the default. For example, if an XBAPs is launched from a local intranet, it can take advantage of an increased permission set, which is shown in the following table.

Table 3: LocalIntranet and Internet Permissions

Permissão

Attribute

LocalIntranet

Internet

DNS

Access DNS servers

Sim

Não

Environment Variables

READ

Sim

Não

File Dialogs

Abrir

Sim

Sim

File Dialogs

Irrestrito:

Sim

Não

armazenamentos isolados

Assembly isolation by user

Sim

Não

armazenamentos isolados

Unknown isolation

Sim

Sim

armazenamentos isolados

Unlimited user quota

Sim

Não

Media

Safe audio, video, and images

Sim

Sim

Imprimindo

Default printing

Sim

Não

Imprimindo

Safe printing

Sim

Sim

Reflexão

Emit

Sim

Não

Segurança

Managed code execution

Sim

Sim

Segurança

Assert granted permissions

Sim

Não

Interface de usuário

Irrestrito:

Sim

Não

Interface de usuário

Safe top level windows

Sim

Sim

Interface de usuário

Own Clipboard

Sim

Sim

Navegador da Web

Safe frame navigation to HTML

Sim

Sim

Observação Observação

Recortar e colar só é permitido em confiança parcial quando iniciada pelo usuário.

Caso você precise aumentar as permissões, você precisará alterar as configurações do projeto e o manifesto do aplicativo ClickOnce. Para obter mais informações, consulte Visão geral dos aplicativos de navegador XAML do WPF. Os seguintes documentos também podem ser úteis.

Se sua XBAP requer confiança total, você pode usar as mesmas ferramentas para aumentar as permissões solicitadas. Embora um XBAP somente receberá confiança total, se ele é instalado e iniciado a partir do computador local, intranet, ou uma URL que está listada do navegador confiáveis ou sites permitidos. Se o aplicativo é instalado a partir da intranet ou um site confiável, o usuário receberá o prompt padrão de ClickOnce notificando sobre essas permissões elevadas. O usuário pode optar por continuar ou cancelar a instalação.

Como alternativa, você pode usar o modelo de implantação confiável de ClickOnce para implantação de confiança total de qualquer zona de segurança. Para obter mais informações, consulte Visão geral da implantação de aplicativos confiáveis e Segurança (WPF).

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft