Чи повинен слід відстежувати стек у повідомленні про помилку, поданому користувачеві?


45

У мене на робочому місці є трохи аргументів, і я намагаюся з’ясувати, хто правий, і що правильно робити.

Контекст: веб-додаток інтранет, який користуються нашими клієнтами для бухгалтерського обліку та інших матеріалів ERP.

Я вважаю, що повідомлення про помилку, представлене користувачеві (коли аварійне завершення роботи), повинно містити якомога більше інформації, включаючи трасування стека. Звичайно, це має початися з приємного "Помилки сталося, будь ласка, надішліть розробникам нижче інформацію" великими, доброзичливими листами.

Моє міркування полягає в тому, що скріншот програми, що вийшов з ладу, часто є єдиним легко доступним джерелом інформації. Звичайно, ви можете спробувати влаштуватися у системного адміністратора клієнта, спробувати пояснити, де знаходяться ваші файли журналів тощо, але це, ймовірно, буде повільним і болісним (розмова з представниками клієнта в основному є).

Крім того, наявність негайної та повної інформації є надзвичайно корисною розробкою, де вам не доведеться шукати файли журналів, щоб знайти те, що потрібно для кожного винятку. (Але це можна вирішити за допомогою перемикача конфігурації.)

На жаль, був якийсь "аудит безпеки" (навіть не уявляю, як вони це зробили без джерел ... але що б там не було), і вони скаржилися на повідомлення про повне виключення, вказуючи їх на загрозу безпеці. Звичайно, клієнти (принаймні одного, про якого я знаю) сприйняли це за номінал і тепер вимагають очистити повідомлення.

Я не бачу, як потенційний зловмисник може використати слід стека, щоб зрозуміти все, що він не міг раніше з'ясувати. Чи є приклади, будь-які задокументовані докази того, хто хтось робив це? Я думаю, що ми повинні боротися з цією дурною ідеєю, але, можливо, я тут дурень, так що ...

Хто прав?


25
Ого. Просто ... вау. " Unfortunately there has been some kind of "Security audit"" - Серйозно? Яке таке ставлення? Аудит безпеки - на вашу користь - щоб покращити вашу систему, знайти проблеми до того, як зроблять погані хлопці. Вам слід справді розглянути можливість намагатися працювати з ними, а не проти них. Крім того, ви можете спробувати отримати більш детальну інформацію про PoV над безпекою на інформаційній безпеці .
AviD

7
І btw, аудиту безпеки не обов’язково потрібен доступ до вихідного коду, вони, ймовірно, зробили тест на проникнення в чорну скриньку, імітуючи те, що буде робити зловмисний користувач - спробуйте атакувати додаток як користувач. Хоча я згоден, що доступ до вихідного коду міг би забезпечити набагато ефективнішу форму аудиту. :-)
AviD

1
@AviD - по правді кажучи, я не знаю, що вони проаналізували, але з деяких звітів я побачив, що це здалося мені тестом з чорної скриньки. Якщо чесно, я не хочу працювати проти них. Дійсно, мені подобалися новини, коли я їх чув. Але ця їх особлива «вразливість» здається дурною. У кожному рішенні з безпеки ви повинні зважувати зменшення загрози проти зменшення юзабіліті. У цьому випадку я думаю, що це значно зменшує зручність використання, ніж покращує безпеку.
Vilx-

1
Я дуже згоден щодо зважування, але я не згоден з його застосуванням. Це шкодить безпеці більше, ніж ви думаєте, і я також вважаю, що ваш спосіб (теж я це робив, поки я не поговорив з деякими користувачами .....) гірший для зручності використання. Подумайте про це орієнтоване на завдання - як сказано у відповіді Джона, його спосіб робить роботу користувача набагато краще. Користувачеві не потрібно дбати про стек (якщо тільки ваші користувачі не розробники ...). Але, мій досвід в галузі безпеки - і ризики реальні.
AviD

1
@AviD - Можливо, ви можете вказати мені на деякі ресурси, які пояснюють, як слід стека може бути небезпечним? Я готовий прийняти це, але я хочу щось більше, ніж загальний принцип "лише показати те, що тобі потрібно".
Vilx-

Відповіді:


73

Я схильний будувати журнал додатків, або в БД, або у файлі, і всю цю інформацію записую до цього. Потім ви можете надати користувачеві номер помилки, який визначає, з яким елементом журналу пов’язана помилка, щоб ви могли отримати її назад. Ця закономірність також корисна, оскільки ви можете слідувати за помилками, навіть якщо користувачі не намагаються піднімати їх із вами, тож ви можете краще зрозуміти, де проблеми.

Якщо ваш сайт встановлений у середовищі клієнта, і ви не можете його дістати, ви можете отримати ІТ-відділ на сайті, щоб надіслати вам якийсь витяг на основі помилки №.

Інша річ, яку ви можете врахувати, - це наявність у системній пошті реквізитів помилок у поштовій скриньці, яку ви бачите, тож ви знаєте, коли все йде не так.

По суті, система, яка проливає свої кишки, коли щось не в порядку, не викликає довіри у нетехнічних користувачів - вона, як правило, лякає їх думати, що щось дуже не так (наприклад, скільки BSOD ви розумієте, і як це робити ти відчуваєш, коли хтось підійде)?

На стек-трек:

У .Net трак стека покаже повний слід прямо у основних вузлах, що базуються на MS, і розкриє деталі про те, які технології ви використовуєте, а також можливі версії. Це дає зловмисникам цінну інформацію про можливі слабкі місця, які можна було б використати.


6
Мені подобається ваша відповідь, оскільки це "середня дорога" - не показуйте, але полегшуйте пошук винятків. Я зараз спробую підштовхнути це, я сподіваюся, що вони погодиться. Дякую!
Vilx-

2
Я думаю, що це майже стандартний "зрілий" підхід. Крім того, stacktrace дає велику кількість інформації, однак я поки не знайду рішення, яке може автоматично записувати інформацію про стан разом із стек-треком (без зміни коду скрізь). Здається, що написати власний налагоджувач і приєднати його - це один із можливих способів, але далеко не банальний для реалізації.
Даніель Б

@DanielB: У веб-додатках можна отримати деякі поширені речі (наприклад, userid, clientid тощо) із сеансу / кешу - оскільки це зберігається "у всьому світі", навіть ця багато інформації може допомогти значно відтворити помилки. Як ви кажете, більш деталізований, ніж це, дуже складний.
Джон Егертон

2
Деякі користувачі дуже критичних програм вимагають негайного вирішення будь-якої помилки, що перешкоджає нормальному ходу бізнесу. Весь процес комунікації, що включає різні diciplines лише для того, щоб вирішити помилку, щоб отримати стек помилок, може легко витратити 1 годину або більше, коли помилка трапляється пізно вночі або у вихідні дні.
Тулен Кордова

1
@ user1598390: Погоджено, і в такому випадку копіювання даних про помилку на відстежувану поштову скриньку підтримки може прискорити збір інформації до того, що співробітники служби підтримки знають, що щось порушено ще до того, як це зробить користувач.
Джон Егертон

29

Так, їх багато.

Слід стека може виявити

  • який алгоритм шифрування ви використовуєте
  • які існують шляхи на вашому сервері додатків
  • чи правильно ви дезінфікуєте вхід чи ні
  • як внутрішньо посилаються на ваші об'єкти
  • яка версія та бренд бази даних стоїть за вашим фронтом

... список продовжується і продовжується. В принципі кожне проектне рішення , у великому додатку може бути , пов'язаної з безпекою, і майже всі з них можуть бути віддані через метод або модуль імена. Зауважте, це не означає, що все ще не має сенсу відображати слід стека, якщо середовище, до якого він подається, є безпечним (наприклад, інтранет, а не веб-сайт), але вартість безпеки, безумовно, не дорівнює нулю .


6
Я згоден здебільшого, але деякі з цих речей не повинні мати значення. Наприклад, алгоритм шифрування, який ви використовуєте, не повинен бути секретним для захисту вашої системи.
Олексі

3
Це не має значення, але світ недосконалий, і часто це відбувається. Ось чому захист у глибині (робити багато речей одночасно, яких повинно бути достатньо, якщо вони були ідеальними) має значення.
Кіліан Фот

3
Відверто кажучи, якщо слід стека виявляє все, що могло б допомогти нападникові, то ви робите це неправильно !
Марк Бут

3
@MarkBooth статистично кажучи, ви, ймовірно , робите це неправильно. Ні, подряпайте це - статистична впевненість, що ви щось помиляєтеся. Ви дійсно хочете дозволити зловмисникам знаходити ваші помилки безпеки, перш ніж робити це?
AviD

1
@AviD - Ні, я погоджуюся, найбільш переконливою причиною не відображати сліди стека для користувачів є те, що вони не мають уявлення, що з ними робити, а ваша система реєстрації даних повинна бути захищеною і здатною захоплювати набагато більше стану, ніж захоплення екрана веб-сторінки коли-небудь міг.
Марк Бут

15

Вся справа в тому, що наша головна робота не полягає в тому, щоб полегшити собі справи. Наша робота - полегшити роботу кінцевому користувачеві. Для нас слід стека виглядає як надзвичайно корисна інформація, яку слід надати розробнику. Користувачеві це виглядає як цілковита безглуздість, яка ні до чого. Навіть якщо ви їм скажете інакше, вони цього не усвідомлюють. Якщо ви думаєте, що важко отримати цю інформацію від системних адміністраторів, отримання її від кінцевих користувачів ще гірше.

Що стосується безпеки, то у вас може виникнути точка, якби це був настільний додаток. У такому випадку друк сліду стека не дає нічого, що зловмисник ще не знає. У веб-додатку ця інформація вже не доступна для зловмисника. Ви дійсно оголюючи внутрішні деталі , які зроблять напад набагато простіше.

Чому б не обійти обидва джерела, які викликають занепокоєння, і автоматично не надсилати вам звіти про винятки? Таким чином, вам навіть не потрібно турбуватися про те, що люди не повідомляють про помилки.


2
Користувачі виграють від швидкого вирішення його / її проблеми завдяки інформації, що надається стежкою стека. Але я розумію вашу думку.
Tulains Córdova

11

Погляньте на це питання IT Security SE . Коротше кажучи, слід стека може дати зловмиснику більше інформації для роботи. Чим більше інформації має зловмисник, тим більше шансів проникнути у вашу систему. Я б не базував свою безпеку на тому, що сліди стека завжди приховані, але це також не означає, що ви повинні давати цю інформацію нападникам.

Ви можете отримати більшу частину переваг від правильного ведення бекенду. Це трохи менш зручно, але, мабуть, не варто ризикувати безпекою вашої системи та засмучувати своїх клієнтів.


8

Можливо, ви не можете відобразити слід стека з наступних причин.

Безпека

Показ сліду стека виявляє можливі поверхні атаки для хакерів. Інтранети не застраховані від злому. Це погано відобразиться на вас, якщо ваша мережа була зламана через додаток, за який ви несете відповідальність

Досвід користувача

Для найкращого досвіду користувача, слід дуже багато інформації. Так, інженер повинен записувати належну інформацію про стан помилки та приділяти їй увагу. Однак прагнення користувача зробити те, що ви можете автоматизувати, буде не найкращим для користувача.

Ваша репутація

Кожен раз, коли на веб-сайті відображається слід стека, це виглядає погано. Більшість людей не мають поняття, що це таке, і це змушує їх відчувати, що веб-сайт не є привітним до них. Для тих, хто насправді знає, що це таке, це може бути вказівкою на те, що заявка не була продумана. Багато погано написаних додатків занадто часто показують сліди стека, оскільки це за замовчуванням в деяких структурах, таких як ASP.Net


6
Як розробник програмного забезпечення, коли я бачу слід на стеці на екрані, моїм негайним моментом є "Ось бозо, який нічого не знає про справу з помилками, менше піклується про них і, можливо, навіть менше про користувачів". Інші обертаються навколо "це шалене програмне забезпечення, не працює, воно не працює, його робота з помилками не працює" і "WTF .... Я не роблю для нього цю роботу хлопців". Що хоче знати ваш користувач, це те, що йому потрібно зробити, щоб це виправити. Як це робить слід стека.
mattnz

6

Коротка відповідь: На екстранеті чи веб-сайті має сенс не показувати стек-трек. В інтрамережі переваги показу стек-траса перевершують користь його приховування.

Довга відповідь:

Те саме трапилось і зі мною на роботі. Раніше я думав, що якщо програма виходить з ладу, вона повинна шумно вийти з ладу.

Але потім вони пояснили мені, що потенційний хакер може заразити багато речей із стек-треку.

Я думаю, немає необхідності в доказуванні. Очевидно, що чим більше хакер знає про вашу платформу, тим краще для нього і що менше хакер знає про вашу платформу, тим краще для вас .

Також компанії не хочуть розкривати, як хакер увірвався в їхні системи.

З іншого боку, це інтрамережа , і я вважаю, що переваги того, щоб знати негайно, що пішло не так, якщо не потрібно шукати файл журналу, є великою перевагою та ризиком для безпеки відображення стек-треків у межах вашої компанії не такі високі, як вони говорять.


1
які є "переваги того, щоб негайно знати, що пішло не так", і чому їх не можна отримати з файлу журналу? Здавалося б, за допомогою Інтранету ви могли отримати доступ до файлу журналу навіть простіше, ніж із сайту клієнта.
Wonko the Sane

У моєму сценарії є критичні програми, які мають пріоритет "7/24". Служба довідки для виклику користувачів, якщо проблема - помилка програми чи виняток, служба технічного обслуговування викликає технічного обслуговуючого персоналу, який, можливо, не працює. Незважаючи на те, що інформація про помилку, експерт може доручити людині на місці вирішення проблеми ... Часто заощаджений час дорогоцінне, якщо додаток є критичним для бізнесу. якщо експерт, який, якщо ви не будете передусім, повинен спочатку підключитися до компанії, здійснити пошук у журналі та ін., критична функція бізнесу може чекати без потреби.
Тулен Кордова

3
@ user1598390 тому побудуйте механізм перегляду журналу. Проста веб-сторінка, введіть ідентифікатор інциденту та довідкова служба може побачити весь відповідний журнал. Звичайно, обмежте доступ до цієї функції і так далі ...
AviD

Тільки тому, що додаток знаходиться в інтранеті вашої компанії, не означає, що в ньому немає зловмисних користувачів. Там є безліч незадоволених співробітників, які дуже добре можуть неправильно використовувати внутрішню систему задля власної вигоди. Оскільки ці працівники знають багато про компанію та її політику, вони насправді можуть бути небезпечнішими, ніж внутрішній хакер. Проходження файлів журналів - досить тривіальна задача, особливо якщо ви дотримуєтесь належної практики, а також записуйте помилки до певного файлу журналу помилок.
cliff.meyers

5

У будь-якому постачаному продукті очікувана кількість помилок цього типу має бути нульовим. Корисність цієї інформації для замовника дорівнює нулю. В обох підрахунках немає підстав представляти слід стека. Якщо є якийсь корисний контекст, він повинен бути представлений зручним для клієнта способом, а не як слід стека.

З іншого боку, якщо фактична кількість випадків не дорівнює нулю, вам відчайдушно потрібна ця інформація, і ви не повинні розраховувати на те, щоб клієнт надсилав її вам. 99,99% часу вони не будуть. Вам слід встановити систему звітування про помилку, яка подає інформацію автоматично, лише "добре" від замовника.


Я б схвалив цю відповідь лише для наступного рядка: "Корисність цієї інформації для клієнта дорівнює нулю". . Будь-які технічні деталі щодо внутрішнього продукту повинні бути прихованими, якщо немає вагомих причин не робити цього з простої причини простоти та зручності використання кінцевого споживача продукту.
Кьяртан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.