Compartilhar via


Protegendo Controles de Logon

Controles de logon do ASP.NET permitem que você ofereça uma solução para controlar o acesso a páginas da Web baseados na autenticação,associação, e funções do usuário.Controles de login incluem o controle CreateUserWizard, controle Login, controle LoginStatus, controle LoginView, controle PasswordRecovery e controle ChangePassword.As informações neste tópico descrevem como melhorar a segurança dos controles de logon através de práticas recomendadas de configuração e codificação.

Enquanto as seguintes práticas recomendadas de codificação e configuração podem melhorar a segurança do seu aplicativo, também é importante que você continuamente mantenha o seu computador do servidor Web atualizado com os patches de segurança mais recentes para o Microsoft Windows e Serviços de Informações da Internet (IIS), assim como quaisquer patches para o Microsoft SQL   server ou outras fontes de dados.

Você pode encontrar informações mais detalhadas sobre as práticas recomendadas para escrever código seguro e proteger aplicativos no livro "Writing Secure Code" de Michael Howard e David LeBlanc e a orientação fornecida por Microsoft padrões and Practices)https://www.Microsoft.com/Recursos/practices/padrão.mspx).

Informações sobre práticas recomendadas de segurança especial para outros tipos de controles também estão disponíveis nos tópicos a seguir:

Práticas Gerais de Segurança para Controles de Logon

A proteção de controles de logon envolve as seguintes práticas recomendadas em um número de áreas que são abordados resumidamente abaixo com links que levam a mais informações.

Usando o Protocolo Secure Sockets Layer (SSL)

Controles de logon do ASP.NET transmitem informações para o servidor em texto sem-formatação via HTTP.Quando você está lidando com informações confidenciais, altamente é recomendável que você use protocolo HTTPS com criptografia da Secure Sockets Layer(SSL).SSL evita que dados sejam alterados (integridade de dados), protege a identidade de um usuário (confidencialidade), e garante que os dados sejam provenientes de um cliente esperado (autenticação).Para obter mais informações, consulte Visão geral sobre criptografia e Configurando a SSL em um servidor Web ou um site na documentação do IIS.

Validando a Entrada do Usuário

Nunca presuma que a entrada que você obtêm de usuários é segura.Usuários mal-intencionados podem enviar informações potencialmente perigosas a partir do cliente para o seu aplicativo.Para controles de logon, é especialmente importante tomar precauções com as entradas do usuário porque as informações que são inseridas são frequentemente confidenciais.Para obter mais informações sobre como proteger contra entradas mal-intencionadas, consulte Práticas de segurança básica para aplicativos da Web.

Sempre que for prático, use controles de validação para testar nomes de usuário válidos e senhas de alta segurança.Você pode validar algumas entradas de usuário sem controles de validação.Por exemplo, o controle CreateUserWizard suporta validação de requerimento e de comparação.Você também pode especificar uma expressão regular com a propriedade EmailRegularExpression para validar que endereços email coincidam com um padrão especificado e com a propriedade PasswordRegularExpression para validar que as senhas atendem às suas necessidades.

Para maior flexibilidade na validação de entradas de usuário nos controles de logon, você pode usar modelos.Sempre que possível, crie um modelo para o controle, adicione controles individuais (geralmente controles TextBox)e adicione controles de validação para restringir a entrada do usuário para o mais estreito possível.

Observação:

Ao usar controles validação, sempre execute validação no código do servidor além de usar validação do lado do cliente.Isso evita que usuários ignorem a validação desativando ou alterando a verificação de script do cliente.

Para obter mais informações, consulte Validando Entrada de Usuário em Páginas da Web ASP.NET.

Protegendo o Estado de Exibição da Página

Controles de logon armazenam informações no estado de exibição da página, de forma que é uma prática recomendada de segurança proteger o estado de exibição.Embora os dados de exibição da página sejam armazenadas em um formato codificado, eles podem ser exibidos e violados.Para obter mais informações, consulte Visão geral do estado de exibição do ASP.NET.

Protegendo a Associação

Associação do ASP.NET fornece funcionalidade para validação e armazenamento das credenciais do usuário.Os controles CreateUserWizard, Login, PasswordRecovery, e ChangePassword usam a associação do ASP.NET para permitir que você crie um sistema completo de autenticação que exija pouco ou nenhum código.Além disso, os controles LoginName,LoginStatus,e LoginView podem ser usados para completar sua solução para manipular associações de usuário e controlar o acesso a páginas de seu site da Web.Para obter mais informações, consulte Introdução à Associação e Protegendo a Associação.

Provedores de associação fornecidos com o ASP.NET tem um limite interno para o número máximo de tentativas de senhas ou de resposta de senha inválidas, conforme especificado na propriedade MaxInvalidPasswordAttempts.A associação do ASP.NET também permite que você configure o número de minutos em que um número máximo de tentativas de senha ou senha de resposta inválidas são permitidas antes do usuário da associação ser bloqueado, conforme especificado na propriedade PasswordAttemptWindow.O limite padrão de tentativas de senha é 5, e a janela padrão de tentativa de senha é 10 minutos.Limites nos provedores padrão podem ser substituídos por limites definidos na seção Associação do arquivo Web.config do aplicativo.É recomendável que se você definir esses limites, defina os valores tão baixos quanto for prático.Além disso, é recomendável que você não defina a propriedade RequiresQuestionAndAnswerfalse, senão tentativas inválidas de resposta de senha não serão controladas.Para obter mais informações, consulte Provedor de Associação.

Protegendo Email

Os controles CreateUserWizard, ChangePassword, e PasswordRecovery podem enviar mensagens de email com detalhes sobre a transação de usuário concluída.Garanta que as mensagens de email enviadas aos usuários revelam somente informações necessárias.Por exemplo, evite que seja fácil, para partes indesejadas, filtrar a linha de assunto das mensagens de email a partir de outras mensagens de email.É recomendável que você evite enviar senhas por email.Considere outros métodos para verificar transações de senha, como enviar um código de confirmação e uma URL de retorno, que requer que os usuários usem o URL para concluir a transação.

Se a propriedade MailDefinition dos controles CreateUserWizard, ChangePassword, PasswordRecovery não for especificada, e nenhuma mensagem de email é enviada.Quando esses controles são configurados para enviar mensagens de email, é recomendável que você manipule o evento de erro para capturar erros relacionados a SMTP para evitar revelar informações desnecessárias aos usuários.Para o controle ChangePassword, trate o SendMailError e defina a propriedade Handled do objeto SendMailErrorEventArgs como true.Para obter um exemplo que mostra como manipular um evento de erro de email, consulte o evento SendMailError.Para obter mais informações sobre a instalação do serviço SMTP (Simple Mail Transfer Protocol), consulte Como: Instalar e configurar servidores virtual SMTP no IIS 6.0.

Considerações de Segurança para Controles Individuais

As seções a seguir descrevem considerações de segurança para controles de logon individuais.

Assistente de Criação de Usuários

O controle CreateUserWizard coleta informações de um usuário e, em seguida, cria uma conta no sistema de associação do ASP.NET para esse usuário.Você pode estender o controle CreateUserWizard para aceitar informações adicionais, adicionando campos ou etapas antes ou após as etapas CreateUserWizardStep e CompleteWizardStep.Um problema de segurança pode surgir se um usuário não concluir todas as etapas de um controle CreateUserWizard, mas uma conta for criada.Para evitar que os usuários ignorem etapas do assistente personalizado, substitua o método OnNextButtonClick e execute uma autenticação personalizada.Uma vez que que as informações são coletadas, use o método CreateUser da classe MembershipProvider para criar o usuário.

Se você estiver executando tarefas administrativas e estiver usando o CreateUserWizard para criar automaticamente contas de usuário, é recomendável que você definir a propriedade AutoGeneratePassword como true e a propriedade LoginCreatedUser como false.Nesse cenário específico, é recomendável definir a propriedade DisableCreatedUser como false.

Controle Login

O controle Login é um controle composto que incorpora nome de usuário e caixas de texto de senha, bem como uma caixa de seleção indicando se os usuários desejam ser lembrados na próxima vez que visitarem a página.A propriedade RememberMeSet faz com que um cookie de autenticação seja enviado ao navegador do usuário e a propriedade DisplayRememberMe exibe uma caixa de seleção que permite ao usuário controlar se um cookie persistente é enviado.Evite definir RememberMeSet para true e DisplayRememberMe para false, poisum cookie é enviado sem que o usuário saiba. Em geral, existem riscos envolvidos na armazenagem de cookies nos computadores dos usuários.Cookies são outra forma de entrada do usuário e, são, portanto, sujeitos a divulgação e falsificação de informações.Para obter mais informações, consulte Visão Geral de Cookies do ASP.NET.

Se o seu controle Login for usado com uma grande variedade de usuários finais, considere codificar o controle de forma que os usuários em computadores públicos tenham uma opção de usar um cookie não persistente que será descartado após o fim da sessão.Para obter mais informações sobre como escrever cookies, consulte Como: Gravar um cookie.

Controle LoginName

O controle LoginName exibe o nome do usuário que fez login, ou exibe o domínio do usuário e nome da conta se o aplicativo está usando a autenticação do Windows.Considere adicionar uma caixa de seleção que permita aos usuários especificar se suas informações de nome ou conta serão exibidas.Por exemplo, usuários em computadores públicos podem não desejar que informações confidenciais sejam exibidas.

Controle LoginView

O controle LoginView permite que você exiba informações diferentes para os usuários que estão conectados e aos usuários que não estão conectados (usuários anônimos).Examine o conteúdo que você exibe com os modelos AnonymousTemplateLoggedInTemplate, e qualquer conteúdo com modelos associados à propriedade RoleGroups para garantir que os usuários sejam não consigam exibir modelos que não se destina a eles.Em particular, a coleção na propriedade RoleGroups é pesquisada na ordem em que os modelos são definidos.O primeiro modelo correspondente do grupo de função é exibido para o usuário.Se um usuário é um membro de mais de uma função, o primeiro modelo de grupo de função que coincida com qualquer das funções do usuário será exibido.Se mais de um modelo é associado a uma única função, somente o primeiro modelo definido será usado.Para obter mais informações, consulte Noções básicas sobre gerenciamento de papéis.

Controle PasswordRecovery

O controle PasswordRecovery permite que os usuários recuperem suas senhas com base nos endereços de email associados aos seus nomes de usuário.Ao configurar o controle PasswordRecovery, siga estas diretrizes:

  • Manipule o evento SendMailError para entrar em ação se ocorrerem erros durante o envio de mensagens de email.

  • Defina um número limitado de tentativas de resposta de senha com a propriedade MaxInvalidPasswordAttempts e uma janela de tempo limitado com a propriedade PasswordAttemptWindow.

  • Examine todas as informações enviadas para o email dos usuários e examine a segurança do canal usado para transmitir mensagens, especialmente se a mensagem de e mail de recuperação de senha contiver senhas do usuário.Evite enviar mensagens de email que estão claramente marcadas como contendo informações confidenciais, como mensagens nas quais a linha do assunto contiver a palavra " Senha ".

Controle ChangePassword

O controle ChangePassword permite que os usuários alterem suas senhas.Ao configurar o controle ChangePassword, siga estas diretrizes:

  • Manipule o evento SendMailError para entrar em ação se ocorrerem erros durante o envio de email.

  • Defina um número limitado de tentativas de resposta de senha com a propriedade MaxInvalidPasswordAttempts e uma janela de tempo limitado com a propriedade PasswordAttemptWindow.

  • Examine todas as informações enviadas para email usuários e examine a segurança do canal usado para transmitir mensagens, especialmente quando o controle ChangePassword estiver configurado para usar o email para enviar a nova senha para o usuário.

  • Use SSL para garantir que a nova senha do usuário não possa ser lida durante a postagem.

  • Limitar o acesso ao arquivo que usa o controle ChangePassword como o corpo de mensagens de email enviadas para o usuário.Este arquivo é definido pela propriedade BodyFileName da classeMailDefinition.

Consulte também

Tarefas

Como: Instalar e configurar servidores virtual SMTP no IIS 6.0

Conceitos

Práticas de segurança básica para aplicativos da Web

Protegendo controles padrão

Protegendo a Associação

Outros recursos

Gerenciando usuários usando Associação

Protegendo sites da Web ASP.NET

Validação Servidor Controlar Syntax

Serviços de criptografia