7
votes

Existe-t-il une raison pour ne pas déployer des fichiers PDB sur un serveur Web de production?

Je travaille sur un site Web ASP.NET et je voudrais déployer les fichiers PDB car lorsque des exceptions inattendues sont lancées, je veux les enregistrer avec des numéros de ligne donc je peux suivre dans le problème.

Mais je suis préoccupé par la sécurité Sécurité et performance .

Y a-t-il un risque de sécurité pour avoir des fichiers PDB sur un serveur Web, si j'utilise les informations de la trace de la pile pour vous connecter à un fichier non public sur le serveur Web et ne le montrez pas à l'utilisateur?

En ce qui concerne la performance, je sais qu'il est plus coûteux de traiter des exceptions lorsqu'il y a un fichier PDB, mais l'objectif n'est de ne pas avoir d'exceptions, et sur le cas rare quand ils se produisent, pour obtenir de bonnes données de traçage afin que nous peut résoudre le problème.

Mais une chose que je ne suis pas clair sur est la suivante: si une exception est lancée et attrapée, est-ce que je paie toujours la peine PDB? Je pense particulièrement à propos de la threadabortexception jeté lorsque vous Response.ReRirect . Ceci est une application héritée avec beaucoup de ceux-ci dans le flux de programme normal, et donc je viens d'attraper et d'ignorer ces exceptions, mais la présence d'un fichier PDB le rendra-t-elle beaucoup plus coûteuse? Ou est-ce que .NET ignore le fichier PDB, sauf si vous demandez la trace de la pile (que je ne fais pas, pour cette exception particulière)?

Au-delà de cela, tant qu'il n'y a aucune exception excepte, à l'exception de ceux que je veux vraiment savoir en détail, existe-t-il des performances de déployer des fichiers PDB sur le serveur Web?


0 commentaires

3 Réponses :


5
votes

Quant à la sécurité, je ne peux voir aucun problème réel avec le déploiement d'une PDB. Le PDB contient simplement

  • mappage entre les lignes sources et les décalages d'IL
  • noms des locaux
  • noms des fichiers source
  • Liste des en utilisant directives pertinentes à une fonction donnée

    Même si les informations PDB ont été divulguées, je ne considérerais aucune de ces informations sensibles

    Quant à la performance, la simple présence d'un PDB ne changera pas la logique d'exécution de votre application. Il n'est pertinent que pour le débogage et l'exécution normale n'interagissent pas avec elle


5 commentaires

Merci pour la réponse rapide. Pouvez-vous commenter spécifiquement le scénario ThreadabortException? Si l'application redirige et jette un de ceux-ci, et je l'attrape et l'ignorais, est-ce que je paie la pénalité de recherche PDB?


@Joshuafrank Je ne suis toujours pas clair pourquoi vous pensez que les exceptions feront référence au PDB du tout. Ils peuvent très bien faire cela, mais à ma connaissance, ils ne le font pas


Je suppose que je ne suis pas clair lorsque, exactement, le fichier PDB est utilisé pour rechercher des symboles. Est-ce que l'exception est lancée ou lorsque votre code de gestionnaire d'exception demande des données de trace de pile? Je demandais spécifiquement à cause de ce commentaire sur une autre question, ce qui, dans le contexte de la question, il semble que vous payiez le coût de la recherche lorsque l'exception est lancée : Stackoverflow.com/questions/381537/...


@Joshuafrank Ceci semble ne se produire que lorsque la propriété StackTrace est invoquée. Toute la logique pour construire les noms de fichiers se produit ici Afaict


Ah, c'est exactement ce que j'espérais que ce serait, et il est logique de ne pas faire cette recherche coûteuse à moins que vous n'ayez réellement besoin des données. Merci pour votre aide!




1
votes

Je suis d'accord avec JaredPar, bien que vous envisagez de considérer que la plupart des choses qu'il a énumérées, rendez-la encore plus facile à décompiler et à ingénierier ingénieur de votre site si le serveur est piraté.

De l'autre côté, il serait également relativement facile (mais avec un peu plus de travail) pour inverser l'ingénieur sans les PDB, ce n'est donc qu'un risque de sécurité mineur. De plus, en fonction de la portée de votre site Web inverse ingénierie pourraient même pas être un problème.


0 commentaires