PDB デバッグ ファイルをライブ サーバー上に残すことにセキュリティ上の問題はありますか?

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

質問

.NET PDB ファイルを実サーバー上に保持する際にセキュリティ上の問題はありますか?

例外のスローには少し時間がかかるかもしれないことはわかっていますが、そもそも、通常の実行中に例外をスローするのは誰でしょうか?:-)

しかし、セキュリティの観点からはどうでしょうか?何か問題はありますか?

役に立ちましたか?

解決

うーん、これについてはセキュリティ上の注意を払うほうだと思います。PDB は必要ですが、運用サーバーには必要ないと思います。さらに、稼働中のシステムではデバッグをオフにする必要があります。デバッグは厄介なもので、必要のないときはやりたくないものです。

から スコット・ガスリー:

  1. ASP.NET ページのコンパイルには時間がかかります (一部のバッチ最適化が無効になっているため)。
  2. コードの実行が遅くなる可能性があります (いくつかの追加のデバッグ パスが有効になっているため)
  3. 実行時にアプリケーション内でより多くのメモリが使用されます
  4. WebResources.axd ハンドラーからダウンロードされたスクリプトとイメージはキャッシュされません

machine.config で、deployment website=true を設定します。

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

これにより、デバッグ、エラー、およびトレースの設定が上書きされ、コンピューター自体の外部にエラーが漏洩するのを防ぎます。

デバッグがオフになっており、エラーもトレースもオンになっていないのに、なぜ PDB を運用サーバーにデプロイするのでしょうか?それらを別の場所 (開発サーバーなど) に保存します。開発から運用へのコード プロモーション スクリプトでは、具体的に PDB を除外できますが、運用のデバッグが必要になった場合に使用できるように PDB をアーカイブすることができます。

他のヒント

お使いのシステムはのPDBで固定されていない場合は、

は、それはおそらくそれらなしで固定していません。もちろん、それはよりよいエラーレポートはあなたにどのように貴重な依存します。個人的に、私は多くが、そうのPDBを展開する傾向にあることを重視ます。

それもまた正当な議論だと思います ない PDB をライブサーバー上に残すことはリスクです。本番環境がクラッシュし、問題が開発または UAT で再現できない場合、エラーが発生している場所を診断するのにはるかに時間がかかります (おそらく不可能です)。

少なくとも、 デプロイされた DLL と一致する PDB 本番サーバー上のどこかの ZIP ファイルにあるはずです。あなたが近くにいない場合に備えて、あなた以外の人が簡単に見つけられるようにする必要があります。

こちらもご覧ください PDB ファイル:すべての開発者が知っておくべきこと ジョン・ロビンス著。

例外が発生したときにあなたのウェブサイトに.PDBファイルを公開するときに発生する可能性がある唯一の問題はある、とあなたは、web.configファイル内のcustomErrorsプロパティを設定するのを忘れました。スタックトレースは、セキュリティ上の問題になる可能性がある、ファイル名と行番号で表示されます。

私は他のリスクがあるとは思わない。

サーバがIISの場合は、ノー。適切な場所(ウェブサイト\ビン)に保たれている場合、これらのファイルは、公衆にさらされることはありません。時折私は、Webサーバー上で中間体(OBJディレクトリ)ファイルを見つけた - これは偶然のバイナリを公表するの好きな方法であることが表示されます。あなたのPDBSが表示されているすべての例では、あなたのDLLが悪くなる、また表示されます。

ACTIVAで述べたように、

、スタックトレースは、行番号の有無にかかわらず、ハッカーに十分に有用です。プライベートそれをしてくださいます。

私はあなたが本当のサーバ上で実行される可能性があります他のプログラムを想定 - などのサービス、および - 公的にアクセス可能なすべてではありません。

失敗した例外をエンドユーザーに提示すると (別名「死のイエロー スクリーン」)、攻撃者がシステムについてより正確な洞察を得るリスクが生じる可能性があります。

考えられる解決策の 1 つは、 例外処理ポリシー それ:

  1. すべての例外を元のスタック トレース、追加情報、および一意の例外 ID (Guid) とともにログに記録します。
  2. 発生した例外を、例外 ID (参照およびフィードバック用) とサニタイズされたメッセージのみを含むラッパーで置き換えます (例:接続文字列なし)スタック トレース情報は破棄されます。

.NET のオープンソース例外処理ブロックの例:

基本的には約突っついに来るときのPDBだけで、ソースコードの下にあり、そしてASP.NET/IISはどちらかダウンロードされてからそれらを停止しません。

今、わから人々はアセンブリ名を推測しなければならない、そしてそれはそうかもしれないが、なぜリスクを取る?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top