スタックトレースは、ユーザーに表示されるエラーメッセージに含める必要がありますか?


45

私は職場で少し議論があり、誰が正しいのか、何が正しいのかを理解しようとしています。

コンテキスト:顧客が会計やその他のERPに使用するイントラネットWebアプリケーション。

(物事がクラッシュした場合)ユーザーに表示されるエラーメッセージには、スタックトレースなど、できるだけ多くの情報を含めるべきだと思います。もちろん、それはまず、「エラーが発生しました。開発者に以下の情報を送信してください」という大きなわかりやすい手紙で始める必要があります。

私の推論では、クラッシュしたアプリケーションのスクリーンショットがしばしば唯一の簡単に入手できる情報源になるということです。確かに、クライアントのシステム管理者の把握を試みたり、ログファイルの場所を説明したりすることができますが、それはおそらく遅くて苦痛です(ほとんどの場合、クライアントの担当者と話すのはそうです)。

また、すべての例外で必要なものを見つけるためにログファイルを探し回る必要のない開発では、即時かつ完全な情報を持つことが非常に役立ちます。(ただし、これは構成スイッチで解決できます。)

残念ながら、ある種の「セキュリティ監査」があり(ソースなしでどのように行われたかはわかりませんが...何でも)、彼らはセキュリティの脅威としてそれらを引用する完全な例外メッセージについて不平を言いました。当然、クライアント(私が知っている少なくとも1人)はこれを額面通りに受け取っており、現在はメッセージのクリーンアップを要求しています。

潜在的な攻撃者がスタックトレースを使用して、以前は理解できなかったものを把握する方法を理解できません。これまでにこれを行った人の例、証拠はありますか?私たちはこの愚かな考えと戦うべきだと思うが、おそらく私はここで愚か者だから...

誰が正しい?


25
ワオ。ただ...すごい。「Unfortunately there has been some kind of "Security audit"」-マジ?それはどんな態度ですか?セキュリティ監査はあなたの利益のためです-あなたのシステムをより良くし、悪者がやる前に問題を見つけます。彼らに対してではなく、彼らと一緒に仕事をしようとすることを本当に検討すべきです。また、Information SecurityでセキュリティPoVに関する詳細情報を取得することもできます。
AviD

7
また、セキュリティ監査は必ずしもソースコードにアクセスする必要はありません。おそらく、悪意のあるユーザーが行うことをシミュレートするブラックボックス侵入テストを行いました。ユーザーとしてアプリケーションを攻撃してみてください。ソースコードへのアクセスにより、はるかに効率的な監査が可能になったことに同意しますが。:-)
AviD

1
@AviD-実際には、彼らが何を分析したのかわかりませんが、いくつかのレポートから私はそれがブラックボックステストのように見えました。正直に言うと、私は彼らに対して働きたくありません。確かに、私はそれらを聞いたときのニュースが好きでした。しかし、彼らのこの特定の「脆弱性」は私には愚かに思えます。すべてのセキュリティの決定において、脅威の削減とユーザビリティの削減を比較検討する必要があります。この場合、セキュリティが向上するだけでなく、ユーザビリティが大幅に低下すると思います。
-Vilx-

1
計量については同意しますが、その適用については同意しません。それはあなたが思っている以上にセキュリティに害を及ぼします。また、私はあなたのやり方(これを自分でやったこともあります)タスク指向の用語で考えてください-@Jonの答えが言ったように、彼の方法はユーザーの仕事をより良くします。ユーザーはスタックを気にする必要はありません(ユーザーが開発者でない限り)。しかし、私の専門知識はセキュリティにあり、リスクは現実のものです。
AviD

1
@AviD- スタックトレースがどのように危険になるかを説明するリソースを教えていただけますか?私はそれを受け入れる準備ができていますが、「必要なものだけを表示する」という一般的な原則以上のものを望んでいます。
-Vilx-

回答:


73

私は、DBまたはファイルにアプリケーションログを作成し、そのような情報をすべてログに記録する傾向があります。その後、エラーに関連するログ項目を識別するエラー番号をユーザーに与えることができます。このパターンは、ユーザーが気にせずにエラーを追跡できるため、問題がどこにあるのかをよりよく把握できるので便利です。

サイトがクライアントの環境にインストールされていてアクセスできない場合、オンサイトIT部門に連絡して、エラーnoに基づいて抽出物を送信できます。

考えられるもう1つのことは、システムがエラーの詳細を自分の目に見えるメールボックスに電子メールで送信することです。

何かが正しくないときに内臓をこぼすシステムを基本的に持っているからといって、技術的でないユーザーに自信を抱かせることはできません。 1つが現れたときに感じますか?)

スタックトレース:

.Netでは、スタックトレースはコアMSソースアセンブリまでの完全なトレースを表示し、使用しているテクノロジーの詳細と、可能なバージョンも明らかにします。これにより、侵入者は悪用される可能性のある脆弱性に関する貴重な情報を得ることができます。


6
「中間の道」を示すので、あなたの答えが好きです-表示しないで、例外の検索を簡単にします。私は今、そのためにプッシュしようとします、彼らが同意することを願っています。ありがとうございました!
-Vilx-

2
これはほとんど標準的な「成熟した」アプローチだと思います。また、スタックトレースは豊富な情報を提供しますが、スタックトレースとともに状態情報を自動的に記録できるソリューションはまだ見つかりません(どこでもコードを変更することなく)。独自のデバッガーを作成してアタッチする方法は考えられる方法の1つですが、実装するのは簡単なことではありません。
ダニエルB

@DanielB:Webアプリでは、セッション/キャッシュからいくつかの一般的なもの(ユーザーID、クライアントIDなど)を取得することが可能です-「グローバル」に保持されるため、このような情報でもエラーの再現に役立ちます。あなたが言うように、それよりも細かいことは非常に難しいです。
ジョンイガートン

2
非常に重要なアプリケーションの一部のユーザーは、通常のビジネスの流れを妨げるあらゆるエラーに対する即時の解決策を求めています。エラーソルバーがエラースタックを取得するためのさまざまな分野を含むすべての通信プロセスは、エラーが深夜または週末に発生した場合に1時間以上を簡単に消費します。
Tulainsコルドバ

1
@ user1598390:合意されました。この場合、エラーの詳細を監視対象のサポートメールボックスにコピーすると、情報の収集が促進され、ユーザーが気付かないうちに何かが壊れていることがサポートスタッフにわかります。
ジョンイガートン

29

はい、たくさんあります。

スタックトレースは明らかにすることができます

  • 使用する暗号化アルゴリズム
  • アプリケーションサーバー上の既存のパスは何ですか
  • 入力を適切にサニタイズしているかどうか
  • オブジェクトが内部的に参照される方法
  • フロントエンドの背後にあるデータベースのバージョンとブランド

...リストは延々と続く。基本的には大規模なアプリケーション内のすべての設計上の決定がありますセキュリティ関連のこと、そしてほとんどすべての方法またはモジュール名によって離れて与えてもよいです。念のために、それは、送信先の環境が安全な場合(たとえば、インターネットに面したWebサイトではなくイントラネット)にスタックトレースを表示しても意味がないことを意味しませんが、セキュリティコストは間違いなくゼロではありません。


6
私はほとんどの部分に同意しますが、これらのことのいくつかは重要ではありません。たとえば、使用している暗号化アルゴリズムは、システムを保護するために秘密にする必要はありません。
オレクシ

3
それは問題ではありませんが、世界は不完全であり、しばしばそうです。そのため、多層防御(完璧であれば十分なはずの多くのことを同時に行う)が重要です。
キリアンフォス

3
率直に言って、スタックトレースで攻撃者に役立つ可能性のあるものが明らかになった場合、それは間違っています
マークブース

3
@MarkBooth統計的にあなたはおそらく、話している間違ったことをやって。いいえ、それをスクラッチ- あなたはそれのいくつかを間違っていることの統計的確実性。本当にあなたがする前に攻撃者にあなたのセキュリティバグを見つけさせたいですか?
AviD

1
@AviD-いいえ、同意します。ユーザーにスタックトレースを表示しない最も説得力のある理由は、ユーザーがそれをどうするかわからないことです。ウェブページの可能性。
マークブース

15

大切なのは、自分自身で物事を簡単にすることが私たちの主な仕事ではないということです。エンドユーザーの作業を容易にすることが私たちの仕事です。スタックトレースは、開発者にとって非常に有用な情報のように見えます。ユーザーにとっては、まったく役に立たない完全な意味不明のように見えます。別に伝えても、彼らはそれを内面化しません。システム管理者から情報を取得するのが難しいと思う場合、エンドユーザーから情報を取得することはさらに悪いことです。

セキュリティに関して言えば、それがデスクトップアプリケーションである場合にはポイントがあります。その場合、スタックトレースを印刷しても、攻撃者がまだ知らないことは何も提供されません。Webアプリでは、攻撃者はその情報を利用できません。実際、攻撃をはるかに簡単にする内部の詳細を公開しています。

両方の懸念ソースをバイパスして、例外レポートを自動的に送信してみませんか?そうすれば、人々がエラーを報告しないことを心配する必要すらありません。


2
スタックトレースによって提供される情報のおかげで、ユーザーは自分の問題をすばやく修正することができます。しかし、私はあなたのポイントを得る。
Tulainsコルドバ

11

見てみましょうITセキュリティSEのこの質問を。要するに、スタックトレースは、攻撃者により多くの情報を提供することができます。攻撃者の情報が多いほど、システムに侵入する可能性が高くなります。スタックトレースが常に隠されているという事実に基づいてセキュリティを設定することはしませんが、それはその情報を攻撃者に提供する必要があるという意味でもありません。

とにかく、適切なバックエンドロギングからほとんどの利点を得ることができます。少し便利ではありませんが、おそらくシステムの安全性を危険にさらし、顧客を混乱させる価値はありません。


8

次の理由により、スタックトレースを表示しないことを検討してください。

セキュリティ

スタックトレースを表示すると、ハッカーになる可能性のある攻撃対象が明らかになります。イントラネットはハッキングの影響を受けません。あなたが責任を負うアプリケーションのためにネットワークがハッキングされた場合、それはあなたにひどく反映されるでしょう

ユーザー体験

ユーザーの最高のエクスペリエンスを得るには、追跡トレースは情報が多すぎます。はい。エラー状態に関する適切な情報を記録し、エンジニアが注意を払う必要があります。ただし、自動化できることをユーザーに依頼することは、ユーザーにとって最善ではありません。

あなたの評判

スタックトレースがWebサイトに表示されるたびに、見た目が悪くなります。ほとんどの人はそれが何であるか考えていないので、ウェブサイトは彼らにとって友好的ではないと感じています。それが何であるかを知っている人にとっては、それはアプリケーションがよく考えられなかったことを示しているかもしれません。ひどく書かれたアプリケーションの多くは、ASP.Netなどの一部のフレームワークのデフォルトであるため、スタックトレースを頻繁に表示します。


6
ソフトウェア開発者として、画面にスタックトレースを表示すると、すぐに「エラーの処理について何も知らず、エラーをあまり気にせず、おそらくユーザーも気にしないボゾがいます」とすぐに言います。他の人は、「これはくだらないソフトウェアで、動作しない、エラー処理が動作しない」、「WTF ....私は彼のためにこの仕事をしていません」を中心に展開しています。彼はそれを修正する必要があります。スタックトレースはどのようにそれを行いますか。
マッテンツ

6

簡単な答え:エクストラネットまたはインターネットサイトでは、スタックトレースを表示しないのが理にかなっています。イントラネットでは、スタックトレースを表示することの利点は、それを隠すことの利点を上回ります。

長い答え:

同じことが職場で私にも起こりました。以前は、アプリが失敗した場合、騒々しく失敗するはずだと考えていました。

しかし、彼らは私に、潜在的なハッカーがスタックトレースから多くのことを推測できると説明しました。

証明の必要はないと思います。ことは明らかであるより多くのハッカーは、より良い彼のために、ご使用のプラットフォームについて知っているし、その少ないハッカーは、より良いあなたのために、ご使用のプラットフォームを知っています

また、企業はハッカーが自社のシステムに侵入した方法を開示することを望んでいません。

一方、それはイントラネットであり、ログファイルを検索しなければならないことで何がうまくいかなかったかをすぐに知ることの利点は大きな利点であり、会社の境界内にスタックトレースを表示することのセキュリティリスクはそれほど高くないと思います彼らは言っています。


1
「何が間違っていたのかをすぐに知ることの利点」にはどのようなものがあり、なぜそれらをログファイルから取得できないのでしょうか。イントラネットを使用すると、クライアントサイトからより簡単にログファイルにアクセスできるように思われます。
元気ウォンコ

私のシナリオでは、「7/24」優先度を持つ重要なアプリケーションがあります。ユーザーがヘルプデスクに電話し、問題がアプリケーションのエラーまたは例外である場合、ヘルプデスクは、おそらく構外にいるメンテナーに電話します。エラー情報により、専門家は現場の人に回避策を指示できます...アプリがビジネスに不可欠な場合、多くの場合、時間の節約は貴重です。前提から外れた場合、最初に会社への接続、ログの検索などを行う必要がある専門家は、重要なビジネス機能が不必要に待機している可能性があります。
Tulainsコルドバ

3
@ user1598390ので、ログ表示メカニズムを構築します。シンプルなWebページでインシデントIDを入力すると、ヘルプデスクは関連するログ全体を見ることができます。もちろん、この機能へのアクセスを制限するなど...
AviD

アプリが会社のイントラネット上にあるからといって、悪意のあるユーザーがいないという意味ではありません。内部システムを自分の利益のために悪用する可能性のある不満を抱く従業員がたくさんいます。これらの従業員は会社とそのポリシーについて多くのことを知っているため、実際には社内のハッカーよりも危険です。ログファイルを確認するのは非常に簡単な作業です。特に、適切なプラクティスに従っている場合や、特定のエラーログファイルにエラーを記録する場合は特に注意が必要です。
cliff.meyers

5

提供された製品では、このタイプのエラーの予想数はゼロでなければなりません。顧客に対するこの情報の有用性はゼロです。両方の点で、スタックトレースを提示する理由はありません。有用なコンテキストがある場合は、スタックトレースとしてではなく、顧客にわかりやすい方法で提示する必要があります。

一方、実際の発生回数がゼロでない場合は、この情報が必死に必要になるため、顧客に送信してもらう必要はありません。時間の99.99%はそうではありません。顧客からの「OK」だけで、自動的に情報を送信するバグ報告システムをインストールする必要があります。


私はこの答えを次の行だけに賛成します。「顧客に対するこの情報の有用性はゼロです。」。製品の内部構造に関する技術的な詳細は、製品のエンドユーザーの単純さと使いやすさという単純な理由により、そうしない正当な理由がない限り、非表示にする必要があります。
Kjartan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.