Дневник разработчиков №3: Коварная проблема, которая тихо разрушала нашу базу данных
3 сентября 2024 г.Час ночи. Мой телефон начинает сходить с ума.
Я стону и оглядываюсь. Конечно, это еще один звонок PagerDuty. На этой неделе я дежурю, и это уже третий раз за столько же дней, когда меня разбудили по одной и той же причине.
Сотни наших клиентов три дня подряд хором жаловались на то, что они приобрели у нас билеты на мероприятия, а когда прибыли на место, то обнаружили, что ихбилеты уже были выкуплены. Им отказывают во въезде, и они, понятное дело,очень зол.
Первоначальное расследование выявило очень странное поведение.
Клиенты покупали билеты, а затем, буквально через несколько минут, их билеты выкупались. Это было задолго до самого события, так что это было явно неожиданно. И это не было равномерно распространено среди нашей клиентской базы; проблема была в основном сосредоточена в некоторых избранных группах студентов университета.
Мы уже знали, что у нас есть фундаментальная проблема с нашей системой выкупа; можно было самостоятельно отсканировать QR-код в электронном письме с подтверждением заказа билета, как это сделал бы персонал на входе в заведение, что выкупило бы билет. К сожалению, более масштабное исправление этой проблемы было еще через несколько недель.
Но даже в этом случае, почему большое количество клиентов в определенных университетских кругах выкупают или случайно выкупают свои собственные билеты до начала мероприятия?!
Ни одна из наших ранних теорий не имела смысла, и проблема продолжала возникать.
Мы начали копать. В конце концов, мы нашли проблему.
Theавтоматизированныйвирусный сканерпо конкретному университету.edu
Системы электронной почты проверяли все ссылки в наших письмах с подтверждением на наличие вирусов, включаяпрограммное сканирование всех QR-кодов.
Таким образом, этот процесс, совершенно невидимый для моей команды, автоматически выкупал билеты на мероприятия наших клиентов.еще до того, как клиент получил электронное письмо.
Никогда, никогда не обновляйте сохраненные данные при загрузке страницы.
Сделав так, чтобы QR-код билета попадал на веб-страницу, которая немедленно выкупает билет при загрузке страницы, это означало, чточто-либоПосещение этой ссылки человеком или машиной непреднамеренно обновит нашу базу данных, и билет будет отмечен как погашенный.
На наших сайтах есть тысячи невидимых автоматизированных посетителей, о которых мы не думаем большую часть времени. Вот несколько примеров:
- Браузеры предварительно загружают ресурсы.Это большой. Допустим, вы посещаете
https://myblog.com
, и на этой странице есть заметные ссылки на/blog-post-1
и/blog-post-2
. Весьма вероятно, что ваш браузер уже будет предварительно загружать эти страницы в фоновом режиме. Если эти страницы изменяют данные при загрузке страницы, например, для отслеживания посещений,просто находясь на главной страницедостаточно, чтобы вызвать его, даже если вы никогда не нажмете на ссылки.
- Поисковые роботы Google.Еще одна большая проблема. Недавно мы увидели большое количество ошибок, которые возникали из-за того, что поисковые роботы Google посещали страницы, а затем инициировали неаутентифицированные вызовы API.
- Сканеры электронной почты.Очень распространено в школах, государственных учреждениях, крупных корпорациях и т. д.
- Интернет-архивные машины
Простой урок здесь — избегать автоматического выполнения действий при загрузке страниц, насколько это возможно. Помимо проблем, с которыми мы столкнулись, неожиданные побочные эффекты, подобные этому, являются плохим UX. Если действие — «Использовать», сделайте так, чтобы оно происходило при нажатии кнопки с надписью «Использовать».
Надеюсь, эта информация была вам полезна. Подпишитесь сейчас, чтобы получать мой дневник разработчиков на свой почтовый ящик!
Оригинал