Existem problemas de segurança, deixando os arquivos de depuração PDB nos servidores ao vivo?

StackOverflow https://stackoverflow.com/questions/933883

Pergunta

Existem problemas de segurança, mantendo os arquivos .NET PDB no servidor real?

Eu sei que lançar exceções pode demorar um pouco mais, mas que gera exceções durante qualquer maneira execução normal? :-)

Mas a partir de uma perspectiva de segurança? quaisquer problemas?

Foi útil?

Solução

Hmm - eu inclinar-se sobre o lado da precaução de segurança sobre este assunto. Eu acho que você deve ter PDBs, mas não em servidores de produção. Além disso, você deve ter Debug desligado em qualquer sistema vivo. Debug é desagradável, e você só não quero que quando você não precisa dele.

A partir Scott Guthrie :

  1. A compilação de páginas ASP.NET leva mais tempo (desde algumas otimizações de lote estão desactivadas)
  2. O código pode executar mais lenta (uma vez que alguns caminhos de depuração adicionais estão habilitados)
  3. Muito mais memória é utilizada dentro do aplicativo em tempo de execução
  4. Scripts e imagens baixado da WebResources.axd manipulador não são armazenados em cache

Set varejo Implantação = verdadeiro em sua machine.config:

<configuration>
    <system.web>
          <deployment retail="true"/>
    </system.web>
</configuration>
configurações

Este substituições de depuração, de erro e de traço, o que evitará qualquer fora de erro divulgação do próprio computador.

Portanto, agora que você tem de depuração desligado, nenhum erro ou traço em, por que você implantar PDB de para o servidor de produção? Armazená-los em outro lugar, talvez até mesmo o seu servidor de desenvolvimento. Seu script promoção código de Dev a produção pode excluir especificamente os PDBs, mas arquivá-los de modo que eles estão disponíveis se você precisar fazer a depuração de produção.

Outras dicas

Se o seu sistema não é seguro com os PDBs, ele provavelmente não seguro sem eles. Obviamente, isso depende como valioso os melhores relatórios de erro são para você. Pessoalmente, eu valor que muito, por isso tendem a implantar os PDBs.

Eu acho que um argumento justo é também que não deixando os PDBs sobre os servidores de viver é um risco. No caso onde a produção está falhando e os problemas não podem ser reproduzidas em dev ou UAT, é muito mais demorado (e talvez impossível) para diagnosticar onde o erro está ocorrendo.

No mínimo, os PDBs que correspondem as DLLs implantados deve estar em um arquivo ZIP no algum lugar do servidor de produção. Eles devem ser facilmente localizado por outros do que a si mesmo as pessoas no caso de você não estiver por perto para ajudar.

Também ver PDB Files: O que cada desenvolvedor deve saber por John Robbins

.

O único problema que você pode encontrar ao publicar ficheiros.PDB para o seu site é quando ocorre uma exceção, e você se esqueceu de definir a propriedade CustomErrors em web.config. O rastreamento de pilha será exibido com nomes de arquivo e números de linha, que pode ser um problema de segurança.

Eu não acho que existem outros riscos.

Se o servidor é IIS, não. Esses arquivos não será exposto ao público se manteve nos lugares certos (website \ Bin). Ocasionalmente eu encontrei arquivos intermediários (obj diretório) em servidores web - Esta parece ser uma maneira favorita de acidentalmente divulgar binários. Os casos onde seus pdbs são visíveis, você DLLs também são visíveis, o que é pior.

Como observou activa, o rastreamento de pilha é muito útil para um hacker com ou sem números de linha. Mantê-lo privado.

Eu assumo qualquer outro programa que você pode estar sendo executado em um servidor real - serviços, e assim por diante - não é publicamente acessível a todos.

Se você apresentar falha exceções para o usuário final (aka na tela amarela da morte), então ele pode representar um risco de atacante a obter uma melhor visão sobre o seu sistema.

Uma das possíveis soluções - para ter um política de tratamento de exceção que:

  1. Registra todas as exceções com a traça original pilha, informações adicionais e uma ID única exceção (Guid).
  2. Substitui disparou exceção com um invólucro que contém apenas ID exceção (para referência e feedback) e mensagem higienizado (i .: há seqüências de conexão) com descartado informações rastreamento de pilha.

Exemplos de Open Source blocos de manipulação de exceção NET:

Basicamente PDBs são apenas abaixo código fonte quando se trata de picar sobre, e não ASP.NET/IIS não impedi-los de que está sendo baixado também.

Agora que as pessoas teria que adivinhar o nome do assembly, e que pode ser improvável, mas por que correr o risco?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top