Y a-t-il des problèmes de sécurité en laissant les fichiers de débogage PDB sur les serveurs live?

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

Question

Y a-t-il des problèmes de sécurité en gardant les fichiers PDB .NET sur le serveur réel?

Je sais que jeter des exceptions peut prendre un peu plus longtemps, mais qui émet des exceptions lors de l'exécution normale de toute façon? :-)

Mais du point de vue de la sécurité? quelque problème que ce soit?

Était-ce utile?

La solution

Hmm - je penche du côté de la sécurité mise en garde à ce sujet. Je pense que vous devriez avoir PDB, mais pas sur les serveurs de production. De plus, vous devriez avoir Debug désactivé sur tout système en direct. Debug est méchant, et vous ne voulez pas seulement quand vous ne avez pas besoin.

De Scott Guthrie :

  1. La compilation de pages ASP.NET prend plus de temps (puisque certaines optimisations batch sont désactivées)
  2. Le code peut exécuter plus lent (car certains chemins de débogage supplémentaires sont activés)
  3. Beaucoup plus la mémoire est utilisée dans l'application lors de l'exécution
  4. Scripts et images téléchargées à partir du gestionnaire de WebResources.axd ne sont pas mises en cache

Définir détail déploiement = true dans votre machine.config:

<configuration>
    <system.web>
          <deployment retail="true"/>
    </system.web>
</configuration>

Cette opération remplace débogage, erreur et paramètres trace, ce qui empêchera toute divulgation d'erreur en dehors de l'ordinateur lui-même.

Alors, maintenant que vous avez débogage désactivé, aucune erreur ou trace sur, pourquoi voudriez-vous déployer PDB de sur le serveur de production? les stocker quelque part ailleurs, peut-être même votre serveur de développement. Votre script de promotion du code de Dev à la production peut exclure spécifiquement les PDB, mais les archiver afin qu'ils soient disponibles si vous avez besoin de faire le débogage de la production.

Autres conseils

Si votre système est pas sécurisé avec les PDB, il est probablement pas sécurisé sans eux. De toute évidence, cela dépend de la valeur des meilleurs rapports d'erreur sont à votre disposition. Personnellement, je valeur beaucoup, donc ont tendance à déployer les PDB.

Je pense que l'argument est juste que pas en laissant les PDB sur les serveurs live est un risque. Dans le cas où la production se bloque et les problèmes ne peuvent être reproduits sur dev ou UAT, il est beaucoup plus de temps (et peut-être impossible) pour diagnostiquer où l'erreur se produit.

À tout le moins, les PDB qui correspondent aux DLL déployées doivent être dans un fichier ZIP sur le serveur de production quelque part. Ils doivent être facilement repérables par des personnes autres que vous-même dans le cas où vous n'êtes pas là pour aider.

Voir aussi fichiers PDB. Ce que tout développeur doit savoir par John Robbins

Le seul problème que vous pouvez rencontrer lors de la publication des fichiers .pdb à votre site Web est lorsqu'une exception se produit, et vous avez oublié de définir la propriété CustomErrors dans web.config. La trace de la pile sera affiché avec des noms de fichiers et les numéros de ligne, ce qui peut être un problème de sécurité.

Je ne pense pas qu'il y ait d'autres risques.

Si le serveur IIS est, non. Ces fichiers ne seront pas exposés au public si elles sont conservées dans les bons endroits (site \ bin). De temps en temps que j'ai trouvé des fichiers intermédiaires (répertoire obj) sur les serveurs web - cela semble être un moyen favori pour faire connaître accidentellement binaires. Tous les cas où vos PDB sont visibles, vous dll sont également visibles, ce qui est pire.

Comme l'a noté activa, la trace de la pile est beaucoup utile à un pirate informatique avec ou sans numéros de ligne. Gardez-privé.

Je suppose que tout autre programme que vous pourriez être en cours d'exécution sur un vrai serveur - services, et ainsi de suite - ne soit pas accessible à tous.

Si vous présentez à défaut des exceptions à l'utilisateur final (alias dans l'écran jaune de la mort), il pourrait poser un risque d'attaquant un obtenir un meilleur aperçu de votre système.

L'une des solutions possibles - d'avoir un politique de gestion des exceptions :

  1. enregistre toutes les exceptions avec la trace de la pile d'originaux, des informations complémentaires et un ID d'exception unique (GUID).
  2. Remplace tiré exception avec une enveloppe qui contient uniquement ID d'exception (à titre de référence et de rétroaction) et le message aseptisée (à savoir .: pas de chaînes de connexion) avec des informations de trace de la pile au rebut.

Des exemples de blocs Open Source de gestion des exceptions dans .NET:

En gros PDB sont juste au-dessous du code source en matière de fouiner, et ASP.NET/IIS ne les empêche pas d'être téléchargés soit.

Maintenant sûr que les gens doivent deviner le nom de l'ensemble, et peut-être improbable, mais pourquoi prendre le risque?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top