Не шутите с NULL

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

Не шутите с NULL

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

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

Не шутите с NULL

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

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

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

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

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

Не шутите с NULL

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

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

Mr. Null

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

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

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

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

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

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

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

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

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

Источник: habr.com