Segurança em aplicativos da Web em tempo de execução
Desenvolver seu aplicativo requer que você trabalhe com um conjunto de questões de segurança.O outro conjunto de questões — e aqueles que são geralmente mais proeminentes em qualquer discussão de segurança da Web — trata da segurança do seu aplicativo quando ele está implantado e em execução.
Aplicativos da Web, por definição, permitem aos usuários acesso a um recurso central — o servidor da Web — e, através dele, a outras pessoas, como servidores de banco de dados.Para compreensão e implementação de medidas de segurança adequadas, você deve:
Proteger seus próprios recursos contra o acesso não autorizado.
Restringir níveis de acesso por usuário ou função.
Estabelecer dados de integridade e confidencialidade, fornecendo um ambiente relativamente seguro no qual os usuários estão confortáveis para trabalhar com seu aplicativo.
Estabelecer controle sobre como seu aplicativo pode obter acesso aos recursos restritos.
Garantir que o código de seu aplicativo seja executado como esperado.
Este tópico fornece uma discussão geral de como você pode atingir esses objetivos e incluir links para tópicos adicionais onde você pode obter mais detalhes sobre as tecnologias envolvidas.
Você pode ajudar a proteger seu aplicativo contra acesso não autorizado tirando proveito desses tipos de recursos de segurança:
Recursos de segurança oferecidos por Serviços de Informações da Internet (IIS) como parte de suas funções do servidor Web gerais.Isso inclui arquivos do Windows, computador e segurança em nível de usuário.
Segurança que você pode criar para o aplicativo ASP.NET para fornecer acesso específico ao aplicativo.
Processo de segurança no ASP.NET
O IIS oferece muitas opções de segurança para sites da Web.Entretanto, mecanismos de segurança do IIS são muito genéricos, para que os mesmo mecanismos sejam usados para todos os aplicativos.Além disso, opções de segurança do IIS — por exemplo, usando segurança integrada do Windows — nem sempre são convenientes para seu aplicativo.(Para aplicativos de intranet, por outro lado, você pode desejar usar segurança integrada do Windows por simplicidade.)
Portanto, para fornecer acesso a partes específicas de seu aplicativo, você pode usar a segurança do ASP.NET.A segurança do ASP.NET trabalha em conjunto com a segurança do IIS, mas a estende para que você possa personalizar recursos, tais como a maneira de obter as credenciais do usuário.
O IIS recebe solicitações primeiro de clientes e executa quaisquer verificações de segurança que foram estabelecidas para seu aplicativo usando ferramentas de gerenciamento do IIS.Por exemplo, se o aplicativo for configurado no IIS para permitir acesso anônimo, o IIS não executa nenhuma verificação de credenciais.Após executar essa verificação inicial de autenticação, o IIS envia a solicitação ao ASP.NET, que pode executar um segundo nível de verificação.O ASP.NET permite a você especificar restrições de acesso em seu aplicativo usando uma variedade de critérios: Você pode restringir o acesso a páginas específicas ou a usuários específicos e assim por diante.
Autenticação
A tabela a seguir descreve os métodos de autenticação que são suportados pelo ASP.NET.Várias dessas se sobrepor a autenticação do IIS.Para obter detalhes, consulte:Autenticação do ASP.NET.
Tipo de autenticação |
Descrição |
---|---|
Acesso anônimo |
Para aplicativos onde usuários desconhecidos farão solicitações (normalmente, aplicativos da Web públicos).Sobrepõe com o IIS. |
Autenticação Basic and Digest |
(Opção de segurança do IIS) Nesse cenário, os usuários sem credenciais são solicitados a fornecer um nome de usuário e senha. |
Segurança integrada do Windows (também conhecida como segurança NTLM) |
(Opção de segurança do IIS) Se o usuário que faz a solicitação já foi autenticado em uma rede com base no Windows, o IIS pode passar as credenciais do usuário ao solicitar acesso a um recurso. |
Autenticação de Certificado |
(Opção de segurança do IIS) Nesse cenário, o cliente tem um certificado — uma identificação digital — que foi obtido de uma fonte de terceiros.A identidade mapeada para o certificado de cliente é passado para ASP.NET. |
Kerberos |
(Opção de segurança do IIS) O protocolo de autenticação Kerberos define as interações entre um cliente e uma rede de serviço de autenticação conhecido um como Key Distribution Center (KDC).Windows 2000 e 2003 implementam um KDC como o serviço de autenticação em cada controlador de domínio. |
Autenticação do Windows |
(Opção de segurança ASP.NET) Integra com as opções de segurança do IIS anteriormente listadas.O ASP.NET leva o símbolo de segurança criado pelo IIS e o torna disponível como um objeto WindowsPrincipal definido como o valor da propriedade User do atual HttpContext. |
Autenticação de formulários |
(Opção de segurança ASP.NET) Se um usuário precisa ser autenticado, ASP.NET redireciona a solicitação para uma página que você especificar.Esta página geralmente contém um formulário no qual você obtém informações do nome de usuário.(Para segurança extra, o formulário pode ser trocado usando protocolo HTTPS.) Quando seu aplicativo obtém as informações do formulário, ele pode executar uma verificação das credenciais do usuário específica do aplicativo.Um ponto importante é que o processo de autenticação está sob seu controle (diferente do IIS), que permite que você especifique a aparência do formulário e como você escolhe armazenar informações do usuário. Se um usuário é autenticado com êxito, ASP.NET emite um cookie criptografado contendo um símbolo que identifica o usuário para acessos subsequentes. |
Autenticação de formulários é a escolha mais fácil para aplicativos ASP.NET na interconexão de redes públicas porque ela fornece a você um considerável controle sobre como os usuários são autenticados e permite que você armazene autenticação em um símbolo no navegador.
Para obter detalhes sobre segurança do IIS, consulte os tópicos de controle de acesso no Windows servidor TechCenter para IIS no Microsoft TechNet Web site.Para obter detalhes sobre autenticação no ASP.NET, consulte Autenticação ASP.NET.
Para obter detalhes sobre como usar autenticação de formulários com transição de protocolo e delegação restrita em um ambiente de domínio do Windows servidor 2003, consulte Transição de protocolo Kerberos e delegação restrita.
Autorização
Quando seu aplicativo da Web é executado, ele solicita recursos do servidor Web e, com frequência, de outros processos, bem como um banco de dados.O processo ASP.NET é executado em um contexto de usuário que determina como o aplicativo irá solicitar os recursos.O processo ASP.NET executa como um usuário local especial chamado ASPNET (por padrão) em Windows 2000 e Windows XP Professional Edition ou ele executa como a identidade do pool do aplicativos para o aplicativo ASP.NET no Windows 2003 (por padrão, a conta local do NETWORK SERVICE).Essas contas executam com permissões limitadas.Você pode especificar um contexto de usuário diferente para o processo do ASP.NET, incluindo a conta local de SYSTEM (que executa o aplicativo no contexto de administrador) ou um usuário cujas credenciais você explicitamente fornece, embora isso não seja recomendado.
Em seu aplicativo ASP.NET, você pode especificar diferentes usuários que têm acesso autorizado a recursos diferentes.Se seu aplicativo estiver usando autenticação do Windows, você pode usar permissões do Windows para determinar autorização para acessar arquivos ou pastas específicos no servidor.
Como alternativa, você pode usar autorização com URL, na qual autorização pode ser concedida ou negada de acordo com critérios diferentes:
Usuários específicos, ou identidades, que são baseados nas credenciais fornecidas pelo usuário.
Funções, que são entidades definidas para permitir que vários usuários compartilhem privilégios baseado em uma função ou funções comuns.
Verbos, que são os processos HTTP (tais como GET e POST) para acessar partes do seu aplicativo.
Por exemplo, você pode especificar que todos os usuários possam obter páginas (executar o verbo GET) do seu aplicativo, mas que apenas determinados usuários podem postar páginas nele.Da mesma forma, você pode especificar que todos os usuários tenham permissão para executar GET nas páginas mas o direito de postagem de funções específicas seja negado.
Você pode conceder a autorização de URL para o aplicativo como um todo ou em uma base diretório por diretório.Um uso típico é para permitir que todos os usuários exibam páginas em um diretório público, mas manter páginas restritas em um diretório diferente que está autorizado somente para usuários ou funções específicos.
Observação: |
---|
Por padrão, arquivos estáticos, como imagens e folhas de estilos, não estão sujeitos a autorização no ASP.NET quando eles são servidos pelo IIS.Você pode usar recursos de segurança do IIS para restringir o acesso a arquivos estáticos se você não desejar que todos os usuários sejam capazes de acessar os arquivos.Se você usar o servidor Development ASP.NET para testar seu aplicativo ASP.NET, você verá um comportamento diferente porque arquivos estáticos estão sujeitos à autorização no ASP.NET e não serão fornecidos a um usuário anônimo quando o acesso anônimo a esses arquivos estiver desativado.Como alternativa, você pode mapear extensões de nomes de arquivos estáticos no IIS para a extensão ISAPI do ASP.NET, em cujo caso as regras de autorização ASP.NET se aplicarão. |
Para obter mais informações, consulte Autorização ASP.NET e Práticas de segurança básica para aplicativos da Web.
Arquivos de configuração ASP.NET
Você estabelece opções de segurança do ASP.NET usando as configurações em um arquivo Web.config.O arquivo permite que você inclua elementos predefinidos para várias opções de segurança, incluindo seções para autenticação e autorização.As seções relevantes do arquivo Web.config podem ser semelhantes as seguintes.
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
<authorization>
<deny user="?" />
</authorization>
</system.web>
</configuration>
O aplicativo pode conter mais de um arquivo de configuração.Por padrão, há um arquivo de configuração na raiz do aplicativo que especifica a segurança para o aplicativo como um todo — isto é, configurações de segurança são herdadas pelas subpastas.Entretanto, você também pode criar arquivos de configuração em pastas individuais para criar configurações de segurança para essa pasta.
Para obter mais informações, consulte Arquitetura ASP.NET.
Segurança de XML Web Services
Serviços Web XML usando arquivos .asmx executam como aplicativos Web usando ASP.NET e participam, portanto, no mesmo modelo de segurança que qualquer aplicativo ASP.NET.Por exemplo, um serviço Web XML pode ser configurado para usar a Autenticação básica ou a segurança integrada do Windows.
Em tempo de design, quando você tenta para adicionar uma referência para um XML Web Services — isto é, quando você solicita documentos Discovery do XML Web Services — o XML Web Services executará a autenticação padrão do aplicativo da Web de acordo com como ele foi configurado.Por exemplo, se o XML Web Services estiver configurado para usar a autenticação Basic, esperará obter um nome de usuário e senha do cliente solicitante.Se o XML Web Services estiver usando autenticação Basic, por exemplo, a caixa de diálogo Add Web Reference solicitará suas credenciais.
Se você estiver criando um aplicativo que inclui chamadas para um XML Web Services, você precisa ter certeza de que possui credenciais apropriadas antes de fazer a chamada ou a chamada falhará.Em tempo de execução, você pode passar credenciais para o serviço Web XML, definindo a propriedade Credentials do objeto do lado do cliente que representa o serviço Web XML antes de você chamar seus métodos.
Por outras opções de segurança ASP.NET não serem suficientemente flexíveis, XML Web Services pode implementar uma solução de autenticação personalizada na qual informações credenciais são passadas em cabeçalhos SOAP.Nessa solução, credenciais são passadas em uma parte opcional da mensagem trocada entre cliente e servidor.Você pode então escrever um módulo HTTP personalizado (implementando a interface IHttpModule) que pode esperar por informações no cabeçalho e chamar o código de autenticação.
Como com outros aplicativos ASP.NET, o XML Web Services pode implementar autorizações baseadas em função específicas para limitar acesso a partes específicas do aplicativo.
Para obter detalhes, consulte Infraestrutura de XML Web Services e Protegendo XML Web Services criado usando ASP.NET.
Estabelecendo integridade e confidencialidade de dados
Autenticação e autorização estabelecem quem são os usuários e os recursos que eles possam acessar.Esses recursos de segurança são projetados principalmente para ajudar a proteger seu aplicativo da Web contra uso não autorizado.
No entanto, há um aspecto separado à segurança também, que é para ajudar a proteger informações dos usuários e torná-los confiantes de que podem trocar informações confidenciais com você.Por exemplo, se seu aplicativo pergunta aos usuários pelo cartão de crédito ou outros números de conta, informações pessoais, ou quaisquer dados que usuários podem não querer que outras pessoas saibam, você deve fornecer uma maneira de eles enviarem essas informações para você com segurança.
Você pode usar Secure Sockets Layer (SSL) no IIS para trocar informações criptografadas usando o protocolo HTTPS.SSL fornece criptografia em ambas as direções: suas informações são transmitidas para o usuário usando criptografia e informações sobre o usuário remete para seu aplicativo é criptografado da mesma forma.
Estabelecendo SSL e criptografia
Para usar SSL e criptografia, você deve obter uma certificado do servidor para sua empresa ou identidade.O certificado é uma assinatura digital que identifica seu site de uma maneira que não pode tornar-se impessoal.Para aplicativos da Internet (públicos), você obtém uma certificado do servidor de uma autoridade de certificação de terceiros reconhecida.Para aplicativos particulares (intranet), você mesmo pode emitir um certificado do servidor.Você pode fazer isso para ajudar a proteger um aplicativo interno, como um site pessoal.
Seu certificado do servidor também permite configurar conexões criptografadas com SSL com os usuários do navegador.SSL usa um método de criptografia chamado public key encryption.Essa forma de criptografia, existem duas chaves: uma chave pública usada para criptografar dados e uma chave particular que você mantenha em sigilo e use para descriptografar informações criptografadas com a chave pública.O certificado do servidor que você obtém inclui uma chave pública.Quando os usuários desejam usar SSL, seu aplicativo envia o certificado e a chave pública para o navegador.O navegador e servidor usam a chave pública para estabelecer uma maneira de criptografar as troca de informações deles.
Observação: |
---|
Usar SSL requer que o navegador ofereça suporte a uma chave de criptografia que seja pelo menos de 40 bits.Este nível está disponível na maioria dos navegadores.Entretanto, esse comprimento de chave não é considerado seguro.Opcionalmente, você pode configurar seu aplicativo no IIS para apenas permitir conexões SSL com uma chave de 128 bits. |
Depois que você tiver obtido um certificado do servidor, você pode instruir usuários a usarem SSL fazendo-os usarem https:// como prefixo para obter e postar páginas da Web.Seu site também pode ser configurado no IIS para apenas aceitar conexões HTTPS.O IIS e o navegador automaticamente usarão um canal criptografado para trocar informações.
Para obter detalhes sobre como usar o SSL, consulte o artigo Q307267, "How to: Proteger Serviços Web XML com Secure Sockets camada no Windows 2000 "noBase de Dados de Conhecimento Microsoft da Microsoft.Para obter informações sobre criptografia, consulte Visão geral sobre criptografia.Para obter informações sobre certificados e sobre como configurar o SSL, consulte o Windows servidor TechCenter para IIS no site da Microsoft TechNet.
Usando segurança de código no .NET
Como um aspecto final de segurança, você deve tomar medidas para ajudar a garantir que o código no seu aplicativo está protegido contra uso indevido, seja por ser inadvertidamente executado em um contexto inadequado ou por ser usado de uma maneira mal-intencionada.Como ASP.NET faz parte do .NET estrutura, você também pode tirar proveito da segurança de acesso do código para estabelecer permissões para que código tem permissão para fazer.Para obter informações, consulte segurança de acesso do código.