Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала
Це я, пишу скрипт по перебору параметрів для запиту POST на gov.tr, сидячи перед кордоном до Хорватії.

Як все починалося

Ми з моєю дружиною подорожуємо світом і працюємо віддалено. Нещодавно переїжджали з Туреччини до Хорватії (найоптимальніша точка, щоб заїхати до Європи). Щоб не сісти на карантин у Хорватії, потрібно мати довідку про негативний аналіз на ковид, зроблений не пізніше ніж за 48 годин до в'їзду.

З'ясували, що відносно вигідно (2500 рублів) і швидко (усім результати приходять протягом 5 годин) роблять тест в аеропорту Стамбула, з якого ми якраз і вилітали.

В аеропорт приїхали за 7 години до вильоту, знайшли пункт здачі тесту. Роблять все сумбурно: підходиш, даєш паспорт, платиш, отримуєш 2 наклейки з barcode, йдеш у мобільну лабораторію, там у тебе забирають одну із цих наклейок для ідентифікації твого аналізу. Після виходиш, і тобі кажуть: заходь на цей сайт: enabiz.gov.tr/PcrTestSonuc, вбивай свій баркод та останні 4 цифри паспорта, через якийсь час буде результат.

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

Але якщо вбивати дані відразу після аналізу, сторінка видає помилку.

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала
Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

Вже тоді в мою голову закралися думки про "прекрасне" UX, в якому за будь-якої помилки оператора, який вбивав паспортні дані, немає ніякого способу дізнатися про свій результат.

Перед вильотом

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

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала
Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

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

При посадці на рейс з нас зажадали результати тесту, але, на щастя, ми змогли переконати представника аеропорту, що вони скоро з'являться (показали їм баркоди), а в крайньому випадку ми сядемо на карантин.

Варто мені зайти в літак, як за моїм кодом з'явилася інформація, що у мене тест негативний.

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

Після прильоту

І ось тут починається веселощі! Як тільки ми прилетіли і підключилися до місцевого Wi-Fi, з'ясувалося, що запис моєї дружини так і не знаходиться в базі. А на самому кордоні до документів підходили дуже уважно: прикордонник брав тест на коронавірус і виносив до окремої кімнати перевірку його реальності. Ми вирішили, що розповімо нашу трустори як є і дізнаємось, які у нас є варіанти.

Поки ми стояли в черзі, я вирішив перевірити на правильні (свої) та неправильні дані, як реагує сторінка валідації.

З'ясувалося, що вона надсилає пост запит на www.enabiz.gov.tr/PcrTestSonuc/GetPcrRaporVerifyWithKimlik, з наступними параметрами:

barkodNo=XX
kimlikNo=YY
kimlikTipi=2
де barkodNo - Номер баркоду, kimlikNo - номер паспорта, kimlikTipi – фіксований параметр, що дорівнює 2 (якщо заповнювати лише перші два поля). Жодних токенів не було видно. На правильні параметри (мої дані) запит віддавав 1, але в неправильні – 0.

З постмана я спробував перебрати 40 комбінацій (раптом помилка на один символ), але нічого не вийшло.

У цей момент ми підійшли до прикордонника, він вислухав нашу історію та запропонував карантин. Але нам явно не хотілося сидіти 14 днів у квартирі, тому ми попросилися трохи почекати у транзитній зоні, щоби за пару годин спробувати розібратися з проблемою. Прикордонник увійшов до нашого становища, сходив дізнатися, чи можна нам посидіти у білій зоні, і, за згодою керівника, сказав: «okay, just couple of hours».

Я почав шукати телефон тих, що робив тест на Ёрону, і паралельно вирішив протестувати шалену гіпотезу: якщо у цієї системи такий жахливий UX, то і система безпеки не повинна бути гарною, хоч і домен gov.tr.

У результаті, сидячи на дзвінках, я написав невеликий скрипт, який перебирав усі числа від 0000 до 9999 у полі kimlikNo. barkodNo у нас був на наклейці, тому він не міг бути невірним.

Уявляєте моє здивування, коли навіть після 500 безперервних запитів я не був забанен, а скрипт продовжував бігати зі швидкістю 20 запитів за секунду з WiFi аеропорту.

Дзвінки великого успіху не дали: мене перенаправляли від одного департаменту до іншого. Але дуже скоро скрипт видав заповітне значення 6505, що було зовсім не схоже на реальні чотири цифри паспорта.

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

Як погано спроектований UX у тіста на коронавірус мало не посадив нас на самоізоляцію, але дірка в безпеці врятувала

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

Але було 9 ранку та ніч без сну, я запізнювався на онлайн зустріч і був радий, що нас пропустили без карантину, тому просто почав свій шлях Європою.

Джерело: habr.com

Додати коментар або відгук