Хабрахабр

Не шутите с NULL

Достойная пятницы история приключилась с американским исследователем в области безопасности Джозефом Тартаро (Joseph Tartaro). Захотелось ему выделиться, заказав не просто индивидуальный номер на авто, но и связав его со своим ремеслом. Первой мыслью было поиграться с SEGFAULT или чем-то вроде этого. Но в итоге он остановился на номере NULL для своей машины и VOID для своей жены. Почуяли неладное? О том, чем обернулась для него невинная шалость, о ещё одном курьёзном мистере Null и о поучительных багах при проверке типов данных в пользовательском вводе, читайте под катом.

У него даже была надежда, что такой ход избавит его от штрафных талонов. Итак, в 2016 году наш шутник от программирования получил свои новенькие забавные номера на авто и наверняка злорадно потирал ручки. Не то чтоб он сильно нарушал, но ведь сама идея поломать систему таким образом для специалиста по безопасности выглядела весьма интересной.

И очень озадачил предназначенный для этого сайт. Проблемы начались через год, когда он попытался продлить действие номеров онлайн.

Программисты где-то облажались, и введённый им NULL как текстовое значение, по всей видимости, проверялся неверно. Система сочла введённый им номер некорректным. Однако ему удалось продлить номер на год по коду в ссылке, и как-то дальше он на всё это дело подзабил. Ошибка нестрогой типизации?

Дальше история напомнила старый анекдот: Впрочем, как оказалось, это были далеко не проблемы.

Вдруг откуда ни возьмись появляется фея и спрашивает:
— Чем занимаешься, служивый?
— Да вот, тр###юсь.
— А хочешь по-настоящему?
— (мечтательно) Хочу…
Фея взмахнула палочкой… И у танка отвалилась башня. Солдат посреди поля пытается как-то отремонтировать отвалившуюся от танка гусеницу.

Так вот, в начале 2018 он получил вполне заслуженный штраф в размере $35. Он бы мог его опротестовать, но проще было заплатить, сумма невелика. И тут фея взмахнула палочкой… И в почтовый ящик посыпались штрафы за неоплаченные парковки, остановки в неположенном месте и прочая подобная радость. Дюжины и дюжины штрафов на суммы $37, $60, $74, $80… Из совершенно разных уголков Калифорнии. По совершенно разным моделям машин. Из-за очередной кривой проверки типизации значение NULL связалось в базе с его личными данными. И каждый раз, как доблестный страж порядка забывал ввести номер машины в систему при выписке штрафа, приз уходил нашему герою (тут стоило бы попинать заодно и разработчиков фронтэнда за отсутствие проверки на заполнение одного из ключевых параметров).

Для полного счастья к нему ретроспективно применились старые штрафы с неуказанным номером. В какой-то момент он получил два штрафа, выписанных в одном и том же месте с разницей в несколько часов на совершенно разные модели машин. В итоге на нём повисло штрафов на сумму более $12000. Так, ему достались даже штрафы за 2014 год, когда у него даже не было этого номера.

Естественно, Джозеф связался с ними и постарался объяснить ситуацию. Штрафами за парковку занималась частная компания Citation Processing Center. Но это бы означало утрату единственной твёрдой копии, подтверждающей некорректность выписки штрафа. Естественно, манагер на телефоне мягко ушёл на мороз, попросил выслать им назад квитанции, чтобы они там разобрались. Позже он заметил, что в открытой базе штрафов, доступной онлайн, изначальная модель машины была заменена на его. И хорошо, что он не отправил. Ещё один раунд разговоров с манагерами, столько же бесполезный.

Новые штрафы продолжали поступать. В итоге ему пришлось обратиться напрямую в DMV (Department of Motor Vehicles, государственное подразделение, занимающееся вопросами регистрации автотранспорта), и с их помощью ему удалось довольно быстро сократить сумму до $6262, однако это не решило изначальной проблемы. Что самое печальное, DMV отказывает ему в продлении номеров на очередной год, пока штрафы не будут закрыты. На дату написания оригинальной статьи в Wired, неоплаченными значились 2 штрафа на общую сумму $140. DMV отмечает, что их система корректно распознаёт его номера и осознаёт нелепость ситуации. Более того, не очень ясно, куда идти и кому надавать по кумполу, чтобы эту проблему починили. Так что история вполне ещё может иметь своё продолжение. Однако вопросами парковки ведают власти на местах, на которые они никак повлиять не могут. Шалость не удалась.

Mr. Null

Ещё больше не повезло Кристоферу Наллу (Christopher Null). Не повезло родиться с такой фамилией. Если Джозеф Тартаро страдает только со штрафами и только примерно последний год, Кристофер перманентно всё глубже погружается в пучину страданий параллельно с развитием цифровых технологий.

Особенно ему доставляет неудобства широко развившаяся концепция MVP (minimum viable product, минимальный жизнеспособный продукт), которая в некоторых случаях прямо совпадает с концепцией «херак-херак, и в продакшн».

Если даже опустить все шутки школьного уровня на тему его фамилии, а также обвинения в попытке таким образом привлечь к себе внимание (а это неплохой способ, если ты — технический журналист, коим и является Кристофер), странности возникают при работе с некоторыми сайтами и приложениями.

Некоторые же сообщают, что поле не может быть пустым, или что это — зарезервированное слово. По утверждениям Кристофера, большинство сайтов обрабатывают фамилию Null корректно. Что интересно, по его наблюдениям чем крупнее компания стоит за приложением или сайтом, тем больше проблем будет с его фамилией. В редких случаях приложения просто отваливаются.

Так, иногда он получает письма в адрес Media LLC (в то время как название компании Null Media LLC), а иногда во всяком спаме к нему обращаются просто как «Mr.». Отдельно радует его фильтрация данных, отбрасывающая Null из уже сохранённых данных. Например, ставить второе имя или инициал в одно поле с фамилией либо просто добавлять точку в конце. Ему даже пришлось выработать обходные манёвры. Но иногда упрямство системы оказывается непобедимо.

Их система просто отказывалась принимать null в пользовательской части адреса, даже пришлось сделать псевдоним info@ специально для банка. Так, Bank of America напрочь отказывался принимать его e-mail null@nullmedia.com. Бедняге пришлось завести банальный аккаунт на Gmail для особо упоротых. Но банковское ПО активно развивалось, и спустя несколько лет… перестало принимать null даже как часть доменного имени. Также содержащий в себе null, но не в начале имени пользователя.

Расскажите в комментариях. Сталкивались ли Вы с какими-то курьёзами при обработке системных значений?

Вам нравятся наши статьи? Спасибо, что остаётесь с нами. Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? Хотите видеть больше интересных материалов? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2. 2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. Dell R420 — 2x E5-2430 2. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть