Boas Práticas de Programação ASP.NET

Trabalho com ASP.net a algum tempo e no decorrer dos trabalhos venho aprendendo muito sobre boas práticas do dia a dia.   Como todo desenvolvedor, ao pegar um código antigo, é frequente dizer – “Nossa que código ruim, quem fez? Ops, fui eu.”.   Isso acontece porque evoluímos constantemente.

Um amigo postou em seu twitter (http://twitter.com/#!/mariosimaojr) uma lista de boas práticas de programação com ASP.net que achei muito interessante (http://jsprunger.com/asp-net-webforms-best-practices/).  O post tem quase 1 ano e meio e mesmo assim seu conteúdo é muito recente. Vejo todos os dias pessoas cometendo os mesmos erros.

Acredito que uma tradução para o Português para os iniciantes é sempre bem vinda para acelerar a aprendizagem.  Não quero que deixem de aprender inglês, afinal ótimos materiais estão nessa língua, mas o conteúdo do texto pode evitar problemas e melhorar a performance de aplicações.

 

[TRADUÇÃO]

Durante o tempo que utilizo ASP.NET tenho coletado uma boa quantidade de boas práticas e tenho tentado impor em meus projetos – a maioria deles são coisas que posso simplificar como experiência de desenvolvimento, soluções comuns de problemas ou dicas que simplesmente vão tornar sua vida mais fácil.  A maioria das boas práticas são aplicáveis somente para WebForms, mas outros podem ser aplicáveis para o ASP.NET MVC da mesma forma.

·         Não escreva código .NET diretamente na marcação ASPX (a não ser que seja para databinding, como por exemplo o ‘Eval’).  Se também tem um code-behind, isto fará com que seu código esteja em mais de um local tornando o código menos gerenciável. Coloque todo o código .NET no code-behind. Coisas podem se tornar complexas e difíceis de debugar muito facilmente quando tem que olhar a execução do código em dois lugares diferentes.

·         SessionPageStatePersister pode ser usado em conjunto com o ViewState para manter o estado sem aumentar o tamanho  das páginas.  Sobrescrevendo o PageStatePersister da página com um novo SessionPageStatePersister vai armazenar todo o ViewState na memória e guardará somente a chave de criptografia do lado do cliente.  Isto tornará as páginas menores e com download mais rápido se tiver uma quandida significativa de dados no ViewState por alguma razão, no entanto isso vai aumentar o uso de memória do servidor – então tenha cuidado.  Um exemplo de como usar o SessionPageStatePersister pode ser visto abaixo.

 public override PageStatePersister GetStatePersister() {
       return new SessionPageStatePersister(this);
}

·         Crie uma BasePage para que suas páginas possam herdar e reutilizar código entre as páginas. Simples princípios de design de Orientação a Objetos – Se você tem funções comuns entre as páginas, como segurança – coloque em uma classe base e então herde esta classe de System.Web.Page, e herde suas páginas desta classe.

·         Crie uma MasterPage para herança do visual.  Não utilize includes do lado do servidor.  Paginas com muitas diferenças de visual deve usar uma MasterPage diferente.  Não utilize uma MaserPage para herança de código.

·         Faça uso de Cache do ASP.NET para armazenar informações utilizadas com frequência da sua base de dados. Construa (ou reuse) uma camada genérica de cache que vai envolver o Cache do ASP.NET.  Se está carregando a mesma lista da base de dados em um drop down toda vez que a página carrega, você deve estar puxando esta lista do cache com base no quão dinâmicos os dados são.

·         Envolva objetos do ViewState com propriedades em suas páginas para evitar enganos na escrita do índice, etc. Por exemplo, você deve ter uma única chave do ViewState para cada propriedade.  Veja abaixo:

private int SampleId
{
    get
    {
        return ViewState[“SampleId”] == null ? 0 :
            (int)ViewState[“SampleId”];
    }

    set
    {

        ViewState[“SampleId”] = value;
    }
}

·          Evite colocar grandes objetos ou objetos gráficos no ViewState, use principalmente para armazenar Ids ou DTOs muito simples.  Esta é a razão que as pessoas dizem que o viewstate é gigante – eles estão armazenando coisas como DataSets no ViewState (terrível ideia).  Se você se ater a objetos pequenos e com um número limitado de propriedades ou simplesmente Ids inteiros, seus dados no ViewState não serão demasiadamente grandes e seu ViewState será totalmente viável.

·         Envolva a Sessão ASP.NET com uma classe SessionManager para evitar enganos de sintaxe durante o desenvolvimento quando referenciar a sessão.  Este é apenas outra forma de diminuir erros simples de desenvolvimento.

·         Utilize largamente valores de configuração (applicationSettings [key/value]) no web.config – Envolver o Configuration.ApplicationSettings com uma classe pode ser utilizado para leitura com tipagem forte das configurações sem ter que lembrar as chaves do web.config.  Se tem configurações, comportamentos, etc., que precisam ser modificados entre diferentes processos de deploy da aplicação, estes devem ser controlados através de configurações no web.config.  Por exemplo, nos frequentemente recebemos pedidos como “Nós queremos o recurso X até o final do mês” – Então construímos, testamos e implantamos a atualização a tempo.  Mas, adicione um valor no web.config que controla quando o recurso aparece ou não. Exemplo: FeatureXEnabled=”False”, no dia de ir ao ar simplesmente mude a propriedade para “True”.

·         Evite a facilidade de configurar as propriedades de exibição em seus controles, ao invés disso utilize estilos CSS e classes – isto torna o estilo mais gerenciável.  Somente uma boa prática geral de desenvolvimento para web.

·         Crie UserControls em sua aplicação para reutilizar funcionalidades de tela entre suas páginas.  Por exemplo, se um dropdown que contém uma lista de categorias é utilizado em vários lugares no site – crie um controle CategoryPicker que fará o databind por si só quando a página for carregada.  Está é minha 1ª boa pratica para economia de tempo, estou surpreso como vejo o mesmo drop down com os mesmos dados utilizado da mesma forma em 20 páginas diferentes – ainda com a mesma lógica de databinding duplicada 20 vezes!

·         Utilize propriedades em seus UserControls para configurar coisas como valores padrão, diferentes formas entre as páginas, etc.  Proprieadades tipadas podem ser definidas em seu UserControl e pode ser utilizada em sua marcação no ASP.NET utilizando propriedades na classe do UserControl. Esta é uma ótima forma para ter mais velocidade no reuso do seu UserControl – isso, no entanto, leva em uma maior complexidade na lógica do UserControl.

·         Faça uso dos controles de validação do ASP.NET para fazer validações simples, ou use o CustomValidator para fazer validações complexas.

·         Crie uma página de erro amigável para redirecionar quando uma exceção não gerenciada acontecer no site.  Armazene toda exceção que chegar nesta página.  O redirecionamento pode acontecer através do evento Page_Error na sua classe PageBase, no evento Application_Error no Global.asax, ou com a seção de gerenciamento de erro no web.config.  Basicamente, qualquer método que escolher, tenha certeza que nenhuma exceção não tratada deixe de ser logada.

·         Quando trabalha com páginas que utilizam um conjunto de dados muito dinâmico, utilize controle de terceiros como http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx [free], criado por Denis Bauer para simplificar o código necessário para salvar o estado de controles adicionados dinamicamente entre os postbacks.  Este pequeno controle tem salvo incontáveis horas de esforço para criar páginas com UserControls altamente dinâmicos.  Pegadinha – se você utiliza delegates para os event handlers no UserControl, tem que reconecta-lo em cada postback, um pouco confuso mas não é um grande problema realmente.  Event handlers são somente estado que  não são salvos através dos postbacks se utilizar este controle.

·         Desligue o ViewState de controles e UserControls que não precisam dele.

[/TRADUÇÃO]

 

Espero que seja útil.

Deixe um comentário

Silverlight 5 Beta

Microsoft disponibiliza o Silverligth 5 em versão beta para os entusiastas da tecnologia.  Diversas melhorias já foram disponibilizadas e, para mim, a que mais fazia falta aparece nessa versão: Debug em Xaml para verificação do binding!
 
para saber mais acesse:

Deixe um comentário

Wallpaper FullHD Visual Studio 2010

 
 

Deixe um comentário

BadImageFormatException em sistemas x64

Deixe um comentário

DateTimePicker (Nullable)

No começo da carreira, algumas vezes tentei procurar algum componente para winforms que conseguisse mostrar corretamente valores DateTime?.  Nunca encontrei nada por ser algo simples de se fazer, mas na época, pra mim era difícil. 

Abaixo segue o código do Componente de forma bem simples.

DateTimePickerNullable
  1. public class DateTimePickerNullable : System.Windows.Forms.DateTimePicker
  2. {
  3.     public DateTimePickerNullable()
  4.         : base()
  5.     { base.ShowCheckBox = true; }
  6.  
  7.     public new bool ShowCheckBox { get { return true; } }
  8.  
  9.     public new DateTime? Value
  10.     {
  11.         get
  12.         {
  13.             if (this.Checked)
  14.                 return base.Value;
  15.  
  16.             return null;
  17.         }
  18.         set
  19.         {
  20.             base.Value = value ?? base.MinDate;
  21.  
  22.             if (value == null)
  23.                 this.Checked = false;
  24.         }
  25.     }
  26. }

Deixe um comentário

Wallpapers

Deixe um comentário

Atualização de Segurança para ASP.NET disponível

No dia 28 de setembro  a Microsoft disponibilizou uma atualização de segurança para a falha que descrevi nos ultimos posts (aqui e aqui).  E é recomendado instalar esta atualização o mais rapido nos seus servidores web.

Algumas questões comuns:

Fazendo a atualização preciso modificar algum código?

Não. A Atualização não requer qualquer alteração no código ou na configuração em suas aplicações .net existentes.

Ainda preciso fazer algum procedimento para contornar a falha depois de instalar a atualização?

Não. A atualização remove a necessidade de contornar a falha de segurança da forma como foi mostrado no passado.  Esses procedimentos foram mostrados para serem efetuados enquanto a atualização de segurança não fosse disponibilizada.

Qual o impacto de aplicar a atualização em um servidor ativo?

Se aplicar em um servidor ativo, ele vai ficar indisponível durante um curto periodo (mesmo que o reboot do sistema operacional não seja necessário). Por causa disso, provavelmente, seria conveniente agendar o update.

Importante – se seu site ou aplicação está rodando em multiplos servidores, se faz necessário aplicar a atualização em todos eles.  Isso ocorre pois  a atualização modifica recursos de criptografia do ASP.NET e a mistura de servidores com e sem a atualização instalada pode causar incompatibilidade entre eles.

Esta atualização funciona com o SharePoint?

Sim.  Não foi encontrado qualquer ocorrencia de erros nos testes de atualização com servidores SharePoint.  É necessário instalar a atualização para ter certeza que os servidors SharePoint não estejam vulneráveis.

Vou poder desinstalar esta atualização se necessário?

Sim.  Essa atualização suporta a instalação e desinstalação.  Mas note que se desinstalar, então, vai deixar seu sistema desprotegido novamente.

Fazendo o Download dos Updates.

O Download já está disponível a partir do Microsoft Download Center.  E estará log disponível através do Window sUpdate e Windows Server Updat, então você poderá simplesmente executar o Windows Update em seu computador/servidor e automaticamente escolher o update para seu ambiente.

Se fizer o download diretamente pelo Microsoft Download Center, então vai precisar selecionar manualmente a atualização apropriada para seu sistema. O Download está dividido por versão do Sistema Operacional e seus Service Packs correspondentes.

Procure por sua versão abaixo, verifique a versão que seu ambiente tem do .net Framework faça o download e aplique a correção no seu sistema.

Windows Server 2008 R2 and Windows 7

 

.NET Framework Version

KB Article

Patch

.NET Framework 3.5.1 (Default install)

KB2416471

Download

.NET Framework 4

KB2416472

Download

 

Windows Server 2008 SP2, Windows Vista SP2

 

.NET Framework Version

KB Article

Patch

.NET Framework 2.0 SP2 (default install)

KB2416470

Download

.NET Framework 4

KB2416472

Download

.NET Framework 3.5 SP1

KB2416470, KB2416473

Download, Download*

.NET Framework 3.5

KB2416470, KB2418240

Download, Download*

.NET Framework 1.1 SP1

KB2416447

Download

*Quando multiplos patch são listados lado a lado então todos deve ser instalados (a ordem é irrelevante).

Windows Server 2008, Windows Vista SP1

 

.NET Framework Version

KB Article

Patch

.NET Framework 2.0 SP1 (default install)

KB2416469

Download

.NET Framework 4

KB2416472

Download

.NET Framework 3.5 SP1

KB2416474, KB2416473

Download, Download*

.NET Framework 2.0 SP2

KB2416474

Download

.NET Framework 3.5

KB2416469, KB2418240

Download, Download*

.NET Framework 1.1 SP1

KB2416447

Download

*Quando multiplos patch são listados lado a lado então todos deve ser instalados (a ordem é irrelevante).

Windows Server 2003 SP2 32-bit

 

.NET Framework Version

KB Article

Patch

.NET Framework 1.1 SP1 (default install)

KB2416451

Download

.NET Framework 4

KB2416472

Download

.NET Framework 3.5 SP1

KB2418241, KB2416473

Download, Download*

.NET Framework 2.0 SP2

KB2418241

Download

.NET Framework 3.5

KB2416468, KB2418240

Download, Download*

*Quando multiplos patch são listados lado a lado então todos deve ser instalados (a ordem é irrelevante).

Windows Server 2003 64-bit

 

.NET Framework Version/SP

KB Article

Patch

Default OS Configuration

NA

NA

.NET Framework 4

KB2416472

Download

.NET Framework 3.5 SP1

KB2418241, KB2416473

Download, Download*

.NET Framework 2.0 SP2

KB2418241

Download

.NET Framework 3.5

KB2416468, KB2418240

Download, Download*

.NET Framework 1.1 SP1

KB2416447

Download

*Quando multiplos patch são listados lado a lado então todos deve ser instalados (a ordem é irrelevante).

Windows XP SP3 32-bit and 64-bit

 

.NET Framework Version/SP

KB Article

Patch

Default OS Configuration

NA

NA

.NET Framework 4

KB2416472

Download

.NET Framework 3.5 SP1

KB2418241, KB2416473

Download, Download*

.NET Framework 2.0 SP2

KB2418241

Download

.NET Framework 3.5

KB2416468, KB2418240

Download, Download*

.NET Framework 1.1 SP1

KB2416447

Download

*Quando multiplos patch são listados lado a lado então todos deve ser instalados (a ordem é irrelevante).

Resumo:

É recomendado aplicar imediatamente a atualização de segurança para proteger suas aplicações contra ataques que se utilizem da falha. 

Links Úteis (Em Inglês)

Artigo original (Scott Guthrie): http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx

Suporte ao cliente Microsoft:
http://support.microsoft.com/contactus/?ws=support#tab0

Forum de ASP.NET
http://forums.asp.net/1233.aspx

Boletim de Segurança sobre a Vulnerabilidade:
http://www.microsoft.com/technet/security/bulletin/ms10-070.mspx

Deixe um comentário

Novidades sobre Vulnerabilidade do ASP.NET

Meu ultimo post foi sobre uma vulnerabiliadde do ASP.NET.

Devido a importancia do fato a Microsoft está trabalhando em uma forma pra resolver o problema de forma rápída via Windows Update.

Revisão do meio de contornar a falha e adição de um passo de URLScan.

No post passado foi colocado um conjunto de passos para contornar a falha de forma rápida nos sites e aplicações prevenindo que codigos maliciosos possam esplorar a vulnerabilidade.  Hoje, é necessário incluir uma medida defensiva adicional.

Este passo adicional pode ser feito em um nível de servidor e deve tomar aprocimadamente 5 minutos para ser implementado.  Este passo não substitui outros passos já informados anteriormente, portanto deve ser executado em adição os passos já informados antes.  Vejamos as instruções:

Instalar e Habilitar o IIS URLScan com uma Regra Customizada

Se ainda não instalou o  IIS URLScan module em seu servidor, por favor, faça-o através dos links abaixo:

Deve levar menos de um minuto para instalar no servidor.

Adicionar um Regra Customizada para URL Scan

Uma vez instalado o URLScan, por favor abra e modifique o arquivo UrlScan.ini nesta localização:

  • %windir%system32inetsrvurlscanUrlScan.ini

Proximo ao final do arquivoUrlScan.ini você poderá encontrar a seção [DenyQueryStringSequences].  Adicione uma entrada opcional “aspxerrorpath=” imediatamente abaixo da seção e salve o arquivo:

[DenyQueryStringSequences]
aspxerrorpath=

Isso deve negar acesso a URLs que possuem uma QueryString no atributo “aspxerrorpath” direcionando para a aplicação ASP.NET, ao invés disso faz com que o servidor web retorne um erro HTTP.  Adicionando esta regra previne que ataques possam diferenciar entre os diferentes tipos de erros que ocorrem no servidor – o que ajuda a impedir ataques utilizando a falha.

Após salvar as mudanças, rode o “iisreset” de um prompt de comando (com nível de administrador) para que as modificações tenham efeito.  Para verificar se as alterções foram feitas com sucesso, tente acessar a url do seu site/aplicação que possua uma querystring com um aspxerrorpath e verifique que um erro HTTP é enviado de volta pelo IIS.

Deixe um comentário

Importante! Vulnerabilidade de Segurança do ASP.NET

Importante! Vulnerabilidade de Segurança do ASP.NET

A algumas horas foi publicado no Microsoft Security Advisory informações sobre uma vulnerabilidade de segurança do ASP.NET

Esta vulnerabilidade foi tornada publica turante a conferencia de segurança de sexta-feira.  É recomendado que todos apliquem imediatamente um "corretivo" para prevenir que scripts maliciosos se utilizem deste problema nas aplicações ASP.NET.

O que a vulnerabilidade permite?

Um atacante pode utilizar esta vulnerabilidade para requisitar e fazer o download de arquivos da aplicação ASP.net como o web.config (que pode conter dados importantes)

Quando o ataque explorar a falha pode descriptografar dados enviados ao cliente em um estado criptografado (como ViewState em uma página).

Como a vulnerabilidade funciona

Para entender esta falha é necessário conhecer profundamente sobre a criptografia das paginas ASP.NET. Existe uma parte do contexto de criptografia do ASP.net que fornece dicas de como responder as requisições. Neste caso, aqui está a vulnerabilidade no ASP.NET que trabalha como uma camada deste contexto. O que permite um atacante enviar textos criptografados para o Servidor Web e saber se foi descriptografado corretamente examinando o codigo de erro retornado.  Fazendo várias requisições (e verificando os erros retornados) o ataque pode descobrir como descriptografar o resto do texto.

Como contornar a vulnerabilidade

Uma maneira de contornar a falha e previnir ataques é habiltar a função <customErros> do ASP.NET, e configurar explicitamente que sua pagina retorne sempre a mesma pagina de errro – escondendo o erro encontrado no servidor.  Mapiando os erros para uma única pagina, você se previne que hackers diferenciem os diferentes tipos de erros acontecendo no servidor.

Importante: Não é simplesmente habilitar o CustomErros ou configurá-lo para RemoteOnly.  Você precisa ter certeza que todos os erros estão direcionados para mesma página.  Isso requer que defina explicitamente o parametro "defaultRedirect" dentro da seção customErrors e certifique-se que nenhum codigo de status está configurado.

Contornando a falha no ASP.NET V1.0 até V3.5

Se está utilizando ASP.NET 1.0, ASP.NET 1.1, ASP.NET 2.0, or ASP.NET 3.5 então devera seguir os seguintes passos para habilitar a sessão 'customErrors' e mapiar todos os erros para uma única página:

1) Edite o Web.Config de sua aplicação principal ASP.NET.  Se o mesmo não existir, crie um na raiz da aplicação.

2) Crie ou modifique a seção <customErrors> no web.config  para ter as configurações abaixo:

<configuration> <system.web> <customErrors mode="On" defaultRedirect="~/error.html" /> </system.web> </configuration>

3) Você deve então adicionar o arquivo error.html em sua aplicação e este deve conter a pagina de erro apropriada que você escolher (contendo o conteúdo que você quiser). Este arquivo será mostrado toda vez que um erro ocorrer em sua aplicação.

Nota: O importante é notar que o modo do customErros é configurado para "on", e todos os erros serão direcionados para a pagina definida em defaultRedirect.  Aqui não temos várias paginas de erro dependendo do código – o que significa que não existem sub-elementos "error" na seção "customErrors". Isso previne que atacantes consigam diferenciar o motivo que um erro ocorreu no servidor e contorna a falha.

Contornando a falha no ASP.NET V3.5 SP1 e ASP.NET 4.0

Se está utilizando ASP.NET 3.5 SP1 ou ASP.NET 4.0 então deve seguir os passos abaixo para habilitar a seção "customErrors" e mapear todos os erros para uma única página:

1) Edite o Web.Config de sua aplicação ASP.NET.  Se este não existir, crie um na pasta raiz da aplicação.

2) Crie ou modifique a seção "customErrors" do web.config para se parecer com as configurações abaixo.  Note que se usa redirectMode=”ResponseRewrite” com o .NET 3.5 SP1 e .NET 4.0:

<configuration> <system.web> <customErrors  mode="On"  redirectMode="ResponseRewrite"  defaultRedirect="~/error.aspx" /> </system.web> </configuration>

3) Você deve então adicionar uma pagina Error.aspx na sua aplicação contendo uma pagina de erro apropriada e de sua escolha (contendo o que você preferir). Este arquivo deve ser mostrado toda vez que um erro acontecer na aplicação.

4) É recomendado adicionar o código abaixo no evento Page_Load() da página Error.aspx para adicionar um pequeno e aleatorio delay. Isso ajuda a ofuscar os erros.

Versão em VB

Abaixo está uma versão em VB do Error.aspx que pode usar para criar o delay. Você não precisa compilar isso em sua aplicação. – Você pode opcionalmente apenas salber este Error.aspx em seu diretório da aplicação ou em seu servidor web:

<%@ Page Language="VB" AutoEventWireup="true" %> <%@ Import Namespace="System.Security.Cryptography" %> <%@ Import Namespace="System.Threading" %> <script runat="server"> Sub Page_Load() Dim delay As Byte() = New Byte(0) {} Dim prng As RandomNumberGenerator = New RNGCryptoServiceProvider() prng.GetBytes(delay) Thread.Sleep(CType(delay(0), Integer)) Dim disposable As IDisposable = TryCast(prng, IDisposable) If Not disposable Is Nothing Then disposable.Dispose() End If End Sub </script> <html> <head runat="server"> <title>Error</title> </head> <body> <div> Sorry - an error occured </div> </body> </html>

Versão em C#

Abaixo está uma versão em C# do Error.aspx que pode usar para criar o delay. Você não precisa compilar isso em sua aplicação. – Você pode opcionalmente apenas salber este Error.aspx em seu diretório da aplicação ou em seu servidor web:

<%@ Page Language="C#" AutoEventWireup="true" %> <%@ Import Namespace="System.Security.Cryptography" %> <%@ Import Namespace="System.Threading" %> <script runat="server"> void Page_Load() { byte[] delay = new byte[1]; RandomNumberGenerator prng = new RNGCryptoServiceProvider(); prng.GetBytes(delay); Thread.Sleep((int)delay[0]); IDisposable disposable = prng as IDisposable; if (disposable != null) { disposable.Dispose(); } } </script> <html> <head runat="server"> <title>Error</title> </head> <body> <div> An error occurred while processing your request. </div> </body> </html>

Como verificar se a falha foi contornada

Uma vez aplicada as alterações, você pode testar para ter certeza que a seção "customErrors" foi corretamente configurada fazendo uma requisição em seu site da seguinte forma: http://SeuSite.com/PaginaQueNaoExiste.aspx

Se for mostrada a pagina de erro que configurou (pois a pagina que pediu não existe) então sua configuração deve ter sido feita corretamente. Se você ver uma pagina de erro ASP.NET padrão então significa que esqueceu de seguir um dos passos acima.  Para maiores informações sobre o que está causando o problema você pode configurar da seguinte forma <customErrors mode=”remoteOnly”/> – Assim irá habilitar que veja a mensagem de erro se você estiver conectado ao site localmente.

Como encontrar a Vulnerabilidade do ASP.NET em seu Servidor Web.

Foi publicado um script .vbs que pode ser salvo e rodar em seu servidor web para determinar se nele estão instaladas aplicações ASP.NET que possuem o "customErrors" desligado, ou que possuam diferentes status de erro dependendo do código.

Você pode fazer o download do script aqui.  Simplesmente copie e cole o script em um arquivo de texto chamado “DetectCustomErrors.vbs” e salve-o no disco.  Então inicie um prompt de comando com nível de administrador e execute o comando "cscript DetectCustomErrors.vbs" para rodar o script no servidor localmente.  Ele irá enumerar todas as aplicações do servidor e fará a verificação se o "customErrors" está com a configuração correta.

Ele irá setar qualquer aplicação que encontrar onde esta não possua a seção "customErrors" (neste caso vai ser necessário adicionar), ou não tenha contornado a falha (neste caso será necessário uma alteração).  E vai imprimir "ok" para cada web.config que estiver configurado corretamente.  Isso deve tornar mais simples a localização dos problemas.

Nota: O Scritp de detecção foi desenvolvido em nas últimas horas e será atualizado no futuro.  Na pagina do autor será feito a atualização a cada mudança efetuada.

Onde encontrar mais informações sobre a vulnerabilidade

Você pode encontrar mais dados sobre a falha em:

Fonte

Este artigo foi traduzido da pagina de Scott Guthrie e o artigo original pode ser encontrado em:

http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx

Ele ainda disponibilizou uma página com as perguntas mais frequentes sobre a falha. Que pode ser encontrada aqui:

http://weblogs.asp.net/scottgu/archive/2010/09/20/frequently-asked-questions-about-the-asp-net-security-vulnerability.aspx

 

Devido a importância da informação decidi traduzir o post para facilitar o entendimento.

 

Deixe um comentário

Teste com WLW

Este é um teste com o Windows Live Writer

Deixe um comentário