Protegendo controles padrão
Os controles do ASP.NET padrão são um grupo de controles que permitem que você crer formulários no qual os usuários podem digitar ou selecionar informações antes que uma página seja postada de volta para o servidor.Os controles padrão são controles de servidor Web que herdam da classe Control.Exemplos de controles de servidor Web incluem controles TextBox, Image e AdRotator.As informações contidas neste tópico descrevem a configuração e as práticas recomendadas de codificação que o ajudarão a melhorar a segurança dos controles padrã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 servidor de aplicativos atualizado com as atualizações de segurança mais recentes do Microsoft Windows e Serviços de Informações da Internet (IIS), assim como quaisquer atualizações de segurança para o Microsoft SQL Server ou outras fontes de dados.
Informações mais detalhadas sobre as práticas recomendadas para escrever código seguro e proteger aplicativos podem ser encontradas no livro "Writing Secure Code" de Michael Howard e David LeBlanc ou a orientação fornecida porPadrões e práticas da Microsoft.
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:
Controle AdRotator
O controle AdRotator exibe anúncios definidos em um arquivo de anúncio, que, por padrão, é um arquivo XML.Como alternativa, você pode armazenar anúncios em um banco de dados e extraí-los através de programação.Para ajudar a proteger o controle AdRotator, siga estas diretrizes:
Se você estiver usando um arquivo XML para armazenar informações de anúncio, coloque o arquivo na pasta App_Data do site, porque o conteúdo da pasta não serão oferecidos em resposta às solicitações Web.
Para proteção extra, não use a extensão .xml em arquivos de anúncio.Em vez disso, use uma extensão como.ads, e então mapeie a extensão.ads para ASP.NET no IIS e para o manipulador proibído no ASP.NET usando o seguinte elemento no arquivo Web.config do site:
<httpHandlers> <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" /> </httpHandlers>
Para obter informações sobre como mapear uma extensão de nome de arquivo para o ASP.NET no IIS, consulte Como: Registrar manipuladores HTTP.
Defina as permissões apropriadas para a conta de usuário ou contas que irão ler o arquivo de anúncio normalmente (somente para leitura).Se o site oferece suporte para acesso anônimo, geralmente é a conta de usuário ASPNET local ou a conta NETWORK SERVICE.
Se o arquivo de anúncio não existir, o controle AdRotator gera um erro que exibe o caminho e o nome do arquivo, que revela informações possivelmente sigilosas.Evitar esse problema seguindo técnicas adequadas de tratamento de erros, incluindo configuração do elemento customErrors no arquivo de configuração para redirecionar a uma página de erro personalizada e criar um manipulador de erro global que é chamado se uma exceção não tratada ocorrer em qualquer lugar no aplicativo.Para obter detalhes, consulte:Como: Exibição Safe erro Messages.
Se você está lendo informações de anúncio de um banco de dados, siga as diretrizes para proteger o acesso ao banco de dados.Para obter detalhes, consulte:Proteção de acesso a dados.
Examine cuidadosamente quaisquer informações do anúncio que obter de uma fonte não confiável antes de usá-lo com o controle AdRotator.Porque o controle AdRotator não realiza qualquer validação ou verificação das informações que ele lê a partir do arquivo de anúncio, ele processa imagens e URLs para o página da Web exatamente como aparecem no arquivo do anúncio ou banco de dados.
BulletedList, CheckBoxList, RadioButtonList, DropDownList, ListBox
Os controles BulletedList,CheckBoxList,DropDownList,ListBox, e RadioButtonList processam tipos diferentes de elementos HTML (ul,input e select) com base no conteúdo das coleções ou em dados em um banco de dados.Para ajudar a proteger esses controles, siga estas diretrizes:
Se os controles leem de um banco de dados, siga as diretrizes para proteger o acesso ao banco de dados.Para obter detalhes, consulte:Proteção de acesso a dados.
Se não tiver certeza se as informações a serem exibidas contém script ou outras marcações, manipule o controle do evento DataBinding e codifique as informações em HTML antes de exibi-lo.Para obter detalhes, consulte:Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings.
Se o controle BulletedList está configurado para exibir elementos gráficos ou hiperlinks, certifique-se que a URL para o gráfico ou o vínculo aponta para uma localidade confiável.
Controle de Calendário
The Calendar controle processa LinkButton controles para permitir navegação no calendário. LinkButton controles usam script de cliente para executar um postback. Caso tenha um navegador desative scripts de cliente por motivos de segurança, o controle Calendar não suportará navegação.
Você sempre pode usar o controle Calendar para exibir datas, mesmo se você não estiver usando-o para permitir a navegação de data.Não presuma que quaisquer datas selecionadas em um Calendar controle estão formatadas corretamente.Ao converter datas do Calendar controle em um formato DateTime interno, certifique-se de usar manipulação de erro apropriada caso a data não estiver no formato correto.
Controle fileUpload
O controle FileUpload permite que os usuários carreguem um arquivo de seu computador para o computador do servidor Web.Para ajudar a proteger o controle FileUpload, siga estas diretrizes:
Não confiar em arquivos que são carregados por usuários; usuários mal-intencionados podem tentar carregar arquivos executáveis.Quando você salva um arquivo carregado, verifique sua extensão de nome ou atribuia sua própria extensão para o arquivo.
Não permita que os usuários especifiquem um caminho arbitrário para a localidade ao salvar o arquivo carregado.Verifique se o nome do arquivo contém somente informações de caminho que você mesmo adicionou.
Não revelar a estrutura interna do seu site Web aos usuários que estão carregando arquivos.
Definir permissões de leitura/gravação para a conta de usuário ou contas que forem executar o aplicativo na pasta ou pastas onde os arquivos carregados serão salvos.Se o site oferece suporte a acesso anônimo, isso é geralmente a conta de usuário ASPNET local ou a conta NETWORK SERVICE.No entanto, limite as permissões de leitura/gravação somente para a pasta ou pastas onde o aplicativo armazena arquivos carregados.
Proteja-se contra ataques de negação de serviço definindo o atributo maxRequestLength do elemento httpRuntime no arquivo de configuração.Por padrão, o comprimento máximo solicitação é 4 megabytes (MB).Outras configurações que podem afetar o tamanho dos arquivos carregados são os atributos requestLengthDiskThreshold do elemento httpRuntime e o atributo memoryLimit do elemento processModel.
Determine o tamanho do arquivo carregado consultando a propriedade ContentLength do objeto HttpPostedFile retornado pelo controle, e use o tamanho para decidir se deve aceitar o arquivo.
Controle HiddenField
O controle HiddenField fornece a você uma maneira para definir o conteúdo do elemento HTML <input type="hidden"> em código do servidor.Campos ocultos são usados para armazenar informações na página que são úteis durante o processamento da página mas não devem ser vistos pelos usuários.Para ajudar a proteger o controle HiddenField, siga estas diretrizes:
Não armazene informações sigilosas em controles HiddenField.Embora as informações não estejam visíveis no navegador, ela é parte da página e os usuários podem facilmente exibi-las no código fonte da página.
Não confie informações nos campos ocultos.Usuários mal-intencionados podem alterar de forma maliciosa o conteúdo dos campos ocultos.
Hiperlink
O controle HyperLink processa uma URL para o navegador.Certifique-se de que a URL aponta para uma localidade confiável.
Controles Image e ImageMap
Para exibir elementos gráficos, os controles Image e ImageMap processam uma URL para o navegador.Certifique-se de que a URL aponta para uma localidade confiável.
Controle ImageButton
O controle ImageButton processa uma imagem (elemento img) que usa script de cliente para executar um postback.Caso tenha um navegador desative scripts de cliente por motivos de segurança, o controle não funcionará.
Para exibir o gráfico, o controle envia uma URL para o navegador.Certifique-se de que a URL aponta para uma localidade confiável.
Controles Label e Literal
Os controles Label e Literal exibem textos na página passando ele para o navegador como -is.(O controle Label adicionalmente permite a você especificar a formatação.) Se o texto contiver marcação HTML, por padrão o navegador irá interpretar a marcação e processar o texto da mesma forma, que pode incluir a execução de scripts.
Se você estiver usando o controle Label e não tiver certeza se o texto contém conteúdo mal-intencionado, use codificação HTML para converter o HTML para sua representação de texto.Para obter detalhes, consulte:Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings.
Se você estiver usando o controle Literal e não tiver certeza se o texto pode conter conteúdo mal-intencionado, siga um destes procedimentos:
Defina a propriedade LiteralMode do controle para Encode, que codifica automaticamente conteúdo HTML.
Use codificação HTML para converter o HTML em sua representação de texto.Para obter detalhes, consulte:Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings.
Para obter mais informações, consulte Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings.
Controle LinkButton
O controle LinkButton processa em link (elemento a) que usa script de cliente para executar um postback.Caso tenha um navegador desative scripts de cliente por motivos de segurança, o controle não funcionará.
MultiView
O controle MultiView permite a você adicionar vários controles View e exibi-los condicionalmente.Isso oferece a você a capacidade de criar páginas que se assemelhem a páginas de vários formulários.
Se você alternar entre modos de exibição com base em algo que possa ser facilmente violado, como uma sequência de consulta URL, você pode permitir que alguém tenha uma visão de um modo de exibição o qual não deveria ser visto.Portanto, certifique-se de que os mecanismos para alternar modos de exibição estejam tão seguros quanto possível.Para obter mais informações, consulte Visão Geral sobre o Gerenciamento de Estado do ASP.NET.
Controle TextBox
Como o controle TextBox permite que os usuários digitem quase qualquer texto na página, você deve ser cuidadoso ao aceitar entrada do usuário com esse controle.Para ajudar a proteger o controle TextBox, siga estas diretrizes:
Use controles de validação sempre que possível para limitar a entrada dos usuários para valores aceitáveis.Para obter detalhes, consulte:Introdução aos controles de validação.
Certifique-se de que a propriedade IsValid é definida como true antes de executar o código do servidor.
Use validação redundante de servidor.Isso é especialmente verdadeiro para controles CustomValidator; não crie apenas lógica da validação do lado do cliente.
Defina a propriedade TextBox do controle MaxLength para limitar a quantidade de texto que os usuários podem inserir.Usuários mal-intencionados podem afetar o desempenho de seu aplicativo e potencialmente causar erros de banco de dados através do envio de grandes quantidades de informações em uma caixa de texto.
Codifique a entrada do usuário com o método HtmlEncode, que transforma HTML em sua representação de texto (por exemplo, <b> torna-se <b>), e ajuda a impedir que o HTML seja executado em um navegador.Para obter detalhes, consulte:Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings.
Defina a propriedade TextMode como Password para impedir que o conteúdo da caixa de texto seja exibido na caixa de texto (exibindo pontos).Observe que definir a propriedade TextMode como Password não fornece nenhuma outra proteção; o conteúdo do caixa de texto não é criptografado ou ofuscado, e as informações são enviadas para o servidor como texto limpo.Portanto, ao usar Password, forneça métodos adicionais para garantir que os dados sejam protegidos.
Se você está coletando informações confidenciais, como uma senha ou número de cartão de crédito, use Secure Sockets Layer (SSL) para proteger a comunicação entre o cliente e servidor.Isso se aplica a qualquer uso de controles TextBox, incluindo os controles que incorporem controles TextBox, como o controle CreateUserWizard.
Assistente
O controle Wizard permite que você crie formulários de várias etapas de entrada.Esteja ciente das considerações de segurança a seguir ao usar o controle Wizard:
O Wizard não protege informações sigilosas inerentemente.Se você está coletando dados confidenciais no assistente, use SSL para comunicação segura entre o cliente e servidor para a página que contém o Wizard.
Para oferecer suporte à sua funcionalidade, o controle Wizard inclui um número de controles não visível.Possivelmente um usuário pode manipular esses controles e seus valores para exibir etapas do assistente fora de ordem ou para exibir etapas do assistente que devem ser exibidas para apenas alguns usuários.Para ajudar a evitar isso, certifique-se de que as etapas do assistente sejam exibidas na ordem correta, e etapas com informações confidenciais que não são exibidas a menos que sejam aplicadas as condições corretas.
Controle XML
O controle Xml exibe o conteúdo de um arquivo XML ou sequência de caracteres que contém XML em uma página, opcionalmente, aplicando uma transformação XML.Para ajudar a proteger o controle Xml, siga estas diretrizes:
Quando você está exibindo o conteúdo de um arquivo XML, se for praticável, coloque o arquivo XML na pasta App_Data do site porque o conteúdo da pasta não será enviado em resposta às solicitações Web.
Exiba XML somente de fontes confiáveis.
Use transformações somente de fontes confiáveis.