web-dev-qa-db-fra.com

Comment éviter d'afficher le chemin littéral dans la trace de pile de l'exception?

Lorsque notre application développée en interne (C #, ASP.NET) lève une exception, elle affiche une trace de pile qui contient des informations de chemin comme C:\users\DEVELOPER_FULL_NAME\path\some-module.cs. Il affiche donc le nom complet du développeur qui l'a compilé.

Les développeurs me disent que c'est inévitable. Je trouve cela difficile à croire. Je ne suis pas un programmeur professionnel C #, mais travaillant dans l'informatique, j'ai programmé (de Pascal à Assembleur en C), donc je pense que ma compréhension devrait être assez juste.

Alors, comment pouvez-vous masquer les informations personnelles liées au développeur de la trace de la pile? Compiler avec un utilisateur anonyme sur une machine dédiée? Y a-t-il une possibilité de supprimer ces informations à l'aide d'un commutateur de temps de compilation ou quelque chose comme ça?

8
ChristianH

Quelques pointeurs.

Vous ne devez jamais exposer stacktrace aux utilisateurs. C'est un risque pour la sécurité. Vous ne devez également jamais exposer des messages d'exception aux utilisateurs, uniquement pour les exceptions personnalisées dont vous savez qu'elles ne peuvent pas contenir d'informations sensibles.

Vous ne devez jamais créer votre version candidate sur une machine de développeur. Vous devez utiliser un agent de construction pour cela. La meilleure solution consiste à envisager d'utiliser des agents de génération, par exemple, les développeurs Azure prennent en charge cela et constituent une combinaison d'intégration continue polluée et qui fonctionne bien.

Enfin, vous devez créer la version candidate en mode release. Pour des raisons de performances et de sécurité.

19
Anders

La propriété de construction ou plutôt le paramètre msbuild est /pathmap ou <PathMap>. Il réécrira toutes les traces dans vos emplacements source.

Malheureusement, je n'ai pas pu trouver la documentation parfaite pour cela, mais vous pouvez trouver quelques articles de blog en l'utilisant.

e.G .: https://blog.paranoidcoding.com/2016/04/05/deterministic-builds-in-roslyn.html

Aussi: vous pouvez éviter tout le problème en utilisant un serveur de build, comme suggéré dans les autres commentaires. La solution "globale" consiste probablement à faire les deux.

5
Chris

Une solution simple consiste à cloner (extraire) le projet dans un dossier extérieur des utilisateurs C: \, à condition que les développeurs aient accès à ces dossiers. Par exemple, au lieu de:

C:\users\DEVELOPER_FULL_NAME\path

créez simplement un nouveau dossier (C:\dev) et clonez ici:

C:\dev\path

Bien sûr, comme d'autres l'ont souligné, vous exposez toujours des messages d'exception et des traces de pile aux utilisateurs, mais au moins les noms des développeurs ne sont plus exposés.

0
Graham