Protegendo páginas de Web Parts
As Web Parts são o novo recurso do ASP.NET que oferece aos usuários a capacidade de modificar ou personalizar páginas da Web.Ter páginas da Web personalizadas é muito capacitadora e poderosa para usuários de aplicativos da Web, mas também tem implicações de segurança sobre as quais desenvolvedores devem saber.
Questões de segurança de Web Parts
Porque Web Parts é um recurso do ASP.NET, e os controles Web Parts são controles de servidor ASP.NET estendidos, as páginas Web Parts são suscetíveis a todos os mesmos riscos que as páginas ASP.NET.Um aplicativo Web com páginas que usem controles Web Parts é realmente apenas um tipo especializado de aplicativo ASP.NET e um aplicativo que usa Web Parts pode executar em qualquer nível de confiança que um aplicativo ASP.NET comum.Para obter informações gerais sobre segurança de site Web ASP.NET, consulte Protegendo sites da Web ASP.NET.No entanto, Web Parts possui alguns problemas de segurança exclusivos que páginas ASP.NET normais não possuem.Esses problemas são discutidos nas seções a seguir.
Importando dados de controle
O recurso Web Parts com os maiores riscos de segurança é o recurso de importação.Esse recurso permite que um usuário importe um arquivo de descrição de XML que contém dados de propriedade e estado para um controle de servidor (o arquivo assembly do controle já deve estar disponível no servidor Web).Importar dados para controles é uma maneira para os usuários compartilharem dados e facilmente configurarem controles complexos.Mas o risco inerente é que pode haver dados mal-intencionados no arquivo de descrição.Por exemplo, se alguém tiver colocado código mal-intencionado no script como o valor de uma propriedade de sequência de caracteres no arquivo de descrição, então o script pode ser potencialmente executado quando um usuário importa o arquivo de descrição e adiciona o controle de servidor referenciado a uma página da Web.Para minimizar o risco de importar arquivos de descrição com dados mal-intencionados, controles de servidor que possuem propriedades do tipo sequência devem sempre codificar os dados da propriedade.Outro risco envolve a importação de tipos através dos arquivos de descrição (consulte Arquivos de Descrição de um Controle Web Parts).Um usuário mal-intencionado poderia enviar solicitações para carregar vários asemblies no AppDomain, resultando em uma quantidade excessiva de memória sendo consumida.Se você desejar evitar os riscos associados à importação, você pode desativar o recurso completamente simplesmente não usando o controle de servidor que implementa ele.Ou você pode limitar quais usuários têm acesso ao controle.Por exemplo, você pode usar o gerenciamento de função, e se um usuário está na função de administrador, você poderá adicionar programaticamente a ImportCatalogPart à página para esse usuário.Para obter mais informações sobre o controle, consulte o tópico de referência para a classe ImportCatalogPart.
Exportando dados de controle
O recurso de exportação tem quase tanto potencial para risco quanto importação, pois ele pode expor dados confidenciais.Exportação permite que os usuários salvem os dados de estado e propriedade para um determinado controle em um arquivo de descrição XML.(Esse é o mesmo arquivo que pode ser importado usando o recurso de importação.) O principal risco aqui é que os usuários podem exportar dados confidenciais fora do aplicativo e para o arquivo de descrição, que é um simples arquivo de texto que qualquer pessoa com as permissões apropriadas pode ler.Exportar é desabilitado por padrão no ASP.NET, portanto, se você não precisar do recurso, você pode ignorá-lo com segurança.Isso é claramente a opção mais segura.
Se você deseja para ativar exportação, você deve estar ciente das opções para determinar quais propriedades podem ser exportadas.Quando você cria um WebPart ou um controle de servidor que será usado em uma zona WebPartZone, para cada propriedade pública que você desejar tornar exportável, você pode adicionar o atributo Personalizable de metadados.Isso torna a propriedade exportável se exportação estiver ativado e ela também invoca uma caixa de mensagem para o usuário, avisando que os dados serão exportados.Um dos parâmetros do atributo Personalizable é chamado IsSensitive.Este parâmetro Boolean é útil se você tiver uma propriedade que deseja que seja exportável em algumas situações, mas não em outras.Para obter detalhes e um exemplo, consulte o tópico de referência para a propriedade ExportMode.
Noções básicas sobre detalhes de personalização
Personalização de Web Parts é o recurso que permite que usuários modifiquem páginas da Web de acordo com suas preferências e salvem suas configurações em armazenamento de longo prazo para que as páginas personalizadas mantenham as configurações em sessões do navegador.A maioria dos recursos Web Parts exige personalização; portanto, ele é ativado por padrão em sites da Web do ASP.NET, embora ele seja usado somente nas páginas que contêm controles Web Parts.Por personalização ser um recurso tão poderoso, ele também apresenta algum grau de risco.Os usuários podem modificar o Layout real, a aparência e mesmo o conteúdo e controles em uma página da Web.Os dados de personalização são armazenados em um banco de dados e são usado para processar páginas, para que usuários tenham muito potencial para atividades relacionadas ao conteúdo de um site mal-intencionado.Usuários que têm acesso ao escopo shared personalization podem até mesmo alterar a forma nas quais as páginas serão exibidas a todos os usuários.
Se você tiver uma página específica que usa recursos Web Parts mas não é necessária personalização (por exemplo, um das páginas comuns em um site de portal), ela é uma boa prática desativar personalização porque isso melhora o desempenho e reduz a exposição de seu site a riscos de segurança.Para obter mais informações, consulte Como: desabilitar a personalização de Web Parts.
Autenticando usuários para personalização
Personalização requer usuários autenticados.Você não pode ativar personalização para usuários anônimos.Isso significa que para ter a funcionalidade de Web Parts e personalização completa, seu site da Web deve usar autenticação baseada em Windows ou Forms.Para obter informações sobre opções de autenticação, consulte Práticas Básicas de Segurança para Aplicativos Web ASP.NET.Para configurar um site usando o novo recurso de associação (que usa a autenticação de Formulários), consulte Gerenciando usuários usando Associação.
Concedendo acesso mínimo a personalizações compartilhadas
Alterações à personalização de Web Parts sempre são aplicadas a um determinado intervalo ou escopo de usuários.Alterações feitas no escopo do usuário são visíveis somente ao usuário que fez as alterações, enquanto as alterações feitas no escopo compartilhado são visíveis a todos os usuários.Escopo de personalização compartilhada existe para que usuários em uma função administrativa ou de gerenciamento ou possam fazer alterações em uma página que se aplicam a todos os usuários de um site.Por padrão, é negado acesso para todos os usuários ao escopo compartilhado.Somente usuários selecionados devem obter acesso, que deve ser feito explicitamente em um arquivo de configuração de site da Web.Para obter detalhes, consulte:Como: Enable Shared personalização de páginas de Web Parts.
Usando controles testados e confiáveis
Por Web Parts fornecerem a usuários poderosos recursos, como a capacidade para adicionar novos controles de servidor a uma página, os desenvolvedores deve ter muito cuidado sobre quais controles de servidor eles usam dentro de um aplicativo Web Parts.Controles de servidor, especialmente aqueles de terceiros ou fornecedores, devem ser cuidadosamente revisados e testados para garantir que eles sejam confiáveis para uso em um aplicativo de Web Parts.Por exemplo, suponha que um controle de servidor determinado é malprojetado e ineficiente em seu uso de memória.Se você adicionar esse controle a um catálogo de Web Parts, os usuários poderão adicioná-lo a uma página da Web.E como um controle em um catálogo pode ser adicionado a uma página qualquer número de vezes (várias ocorrências), um usuário pode adicionar o controle de baixo desempenho várias vezes, que poderá efetivamente gerar uma negação de ataque de serviço quando a página tentar processar muitas instâncias do controle.Para obter mais informações sobre catálogos Web Parts, consulte o tópico de referência para a classe CatalogPart.
Usando autorização e filtragem em controles
Web Parts possui um recurso que permite que você defina e verifique o nível de autorização para os controles de servidor que você usa ao criar a interface de usuário (UI) das suas páginas Web Parts.Se um controle está autorizado com base nos critérios definidos, ele aparecerá na página, e se ele está autorizado para algum nível reduzido ou não para tudo, você pode alterar a aparência da mesma forma ou ocultá-la completamente.Por exemplo, suponha que você tenha um usuário que é designado como um administrador.Pode haver um controle que você deseja que seja visível somente ao administrador do servidor.Usando os recursos de autorização e filtragem de Web Parts, você pode garantir que esse controle apareça somente para um administrador designado e esteja oculto de outros usuários.Os principais mecanismos para usar autorização e filtragem são a propriedade AuthorizationFilter da classe WebPart e os métodos IsAuthorized e OnAuthorizeWebPart da classe WebPartManager.
Codificação de propriedades de tipos de sequência na edição de controles
Um recurso exclusivo de Web Parts é que usuários finais podem alternar uma página em um modo de edição e eles podem editar um controle de servidor alterando seu layout, aparência, comportamento e seus valores de propriedade personalizáveis.Mas isso apresenta alguns risco porque um usuário mal-intencionado pode inserir dados inadequados ou tentar um ataque de injeção de script, usando a capacidade para editar propriedades de tipos de sequência.Como uma prática de segurança, se você criar controles personalizados EditorPart para editar controles de servidor, e se qualquer uma das propriedades personalizáveis em um dado controle de servidor são de um tipo de sequência de caracteres ou utilizam um conversor de sequência de caracteres, o controle EditorPart deve codificar os dados da sequência antes de atribuí-los para a propriedade.Para um exemplo, consulte a documentação de referência sobre o método HtmlEncode.
Consulte também
Referência
System.Web.UI.Design.WebControls.WebParts