web-dev-qa-db-ja.com

例外のスタックトレースにリテラルパスを表示しないようにするにはどうすればよいですか?

自社開発のアプリケーション(C#、ASP.NET)が例外をスローすると、C:\users\DEVELOPER_FULL_NAME\path\some-module.csなどのパス情報を含むスタックトレースが表示されます。そのため、それをコンパイルした開発者のフルネームが表示されます。

開発者は私に言っています、これは避けられないです。これは信じがたいことです。私はプロのC#プログラマーではありませんが、ITで働いており、プログラミング(PascalからアセンブラーからCまで)を行っているので、私の理解は十分に公平であると思います。

それでは、開発者に関連する個人情報をスタックトレースからどのように非表示にしますか?専用マシンで匿名ユーザーとコンパイルしますか?コンパイル時スイッチなどを使用してこの情報を取り除く可能性はありますか?

8
ChristianH

ポインターのカップル。

スタックトレースをユーザーに公開しないでください。これはセキュリティ上のリスクです。例外メッセージをユーザーに公開しないでください。機密情報を含めることができないことがわかっているカスタム例外の場合のみ、公開しても問題ありません。

開発者のマシンでリリース候補をビルドすることはできません。これにはビルドエージェントを使用する必要があります。最善の解決策は、ビルドエージェントの使用を検討することです。たとえば、Azure DevOpsはこれをサポートしており、洗練されて機能する継続的な統合スーツです。

最後に、リリースモードでリリース候補をビルドする必要があります。パフォーマンス上の理由とセキュリティの両方のため。

19
Anders

ビルドプロパティまたはむしろmsbuildパラメータは/pathmapまたは<PathMap>。すべてのトレースをソースの場所に書き換えます。

残念ながら、これに関する完璧なドキュメントを見つけることはできませんでしたが、それを使用していくつかのブログ投稿を見つけることができます。

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

また、他のコメントで提案されているように、ビルドサーバーを使用することで問題全体を回避できます。 「全体」の解決策はおそらく両方を行うことです。

5
Chris

簡単な解決策の1つは、C:\ usersのフォルダーoutsideにプロジェクトを複製(チェックアウト)することです。たとえば、次の代わりに:

C:\users\DEVELOPER_FULL_NAME\path

新しいフォルダ(C:\ dev)を作成し、ここに複製します。

C:\dev\path

もちろん、他の人が指摘したように、例外メッセージとスタックトレースをユーザーに公開していますが、少なくとも開発者の名前は公開されていません。

0
Graham