Предупреждение: у нас есть цензура и предварительный отбор публикуемых материалов. Анекдоты здесь бывают... какие угодно. Если вам это не нравится, пожалуйста, покиньте сайт. 18+

История №1109877

Как избежать штрафов

Интересна история попытки хакнуть систему с помощью номерного знака. Американский программист Джозеф Тартаро зарегистрировал автомобильный знак NULL. Дело в том, что во многих языках программирования, в том числе SQL, используемом для работы с базами данных, NULL используется в качестве идентификатора отсутствующего или неприсвоенного значения. Идея заключалась в том, что таким образом можно будет избежать штрафов, потому что система не сможет корректно обрабатывать его номерной знак.

К сожалению, произошло прямо противоположное. Когда его номер попал в базу данных, система связала номерной знак NULL с его адресом. А потом она отправила ему ВСЕ остальные штрафные квитанции, у которых не было реального номерного знака. Общая стоимость штрафов составила $12 049.
+486
Проголосовало за – 547, против – 61
Статистика голосований по странам
Статистика голосований пользователей
Чтобы оставить комментарии, необходимо авторизоваться. За оскорбления и спам - бан.
42 комментария, показывать
сначала новые

Шмулик Турист05.05.20 01:24

Работал я с женщиной, индийского происхождения, которую зовут Ankita Nosurnameused

+2
ответить

Шмулик Турист05.05.20 01:23

Ну в общем, способ сработал. Он, конечно, оспорит все штрафы, выиграет и после этого может спокойно "грешить", ибо прецедент уже есть.
Хотя думаю его заставили бы сменить номер :)

+-1
ответить

Omeganian 04.05.20 18:47

Давно байка ходит...

https://utro.ru/articles/2004/07/26/333532.shtml

+0
ответить

dkurilov04.05.20 16:14

Это не возможно. Даже в случае сбора SQL стейтмента методом конкатенации получится условие типа "where a.number = 'NULL'". Это принципиально отлично от "where a.number is NULL".

+0
ответить

ystervark➦dkurilov04.05.20 16:54

Если нормально делать, то да, невозможно. Там, на Хабре, в комментарии, пишут: " Для номера машины в базе данных выделена строковая переменная, в которую заносят значение «NULL» если номер не определён.". У таких дятлов возможно все.

+0
ответить

dkurilov➦ystervark05.05.20 01:17

Это просто рука-лицо... 8(

+-1
ответить

ystervark04.05.20 13:29

В саму историю как-то не очень верится, но вообще атака на SQL через данные вполне возможна. Обычно, правда, она делается путем вставления кавычек в текстовые поля. А просто нефиг строить оператор SQL при помощи конкатенации строчек. А prepared statement даже и строчки NULL не убоится.

+1
ответить

Скарборо 04.05.20 13:09

Минус за CTRL+С, CTRL+V.
Конечно это тоже не оригинал, но https://habr.com/ru/news/t/463679/

+0
ответить

Troomann➦Скарборо04.05.20 16:02

Во-первых, это не запрещено - в особенности если, как в данном случае, автором - или редактором - указан источник.

Во-вторых, в большинстве источников (в т.ч. на хабре) как автор предполагавшегося хака указывается докладчик DEF CON под ником Droogie.
То, что здесь всплыл Джозеф Тартаро (Josef Tartaro), говорит о том, что автор истории использовал другие - или разные - источники.

+-1
ответить

Kelavrik_0➦Скарборо04.05.20 16:21

Всё же всегда веселят блюстители авторских прав, которые не могут посмотреть на источник. Смотрим историю, там под голосованием есть ссылка и о чудо, она совпадает с вашей.

+180–
Toritoka
Сайт: https://habr.com/ru/news/t/463679/
Выпуск: истории основные 04 мая 2020

+-2
ответить

finnn 04.05.20 12:22

Самое интересное - заголовок "Как избежать штрафов"

+-1
ответить

adder3804.05.20 12:12

Даже если история недостоверна, то всё-таки забавна. "Хорошо, когда кто врёт врёт весело и складно".

+1
ответить

Serge71204.05.20 11:23

Хотя,все может быть. Если программист, который писал базу данных, сделал ошибку и вместо NULL написал "NULL", в текстовое поле номера запишется текст "NULL" вместо специального значения NULL.
Вторая часть истории, получил штрафы за всех неопознанных, теоретически возможна.

+-1
ответить

Paulpelz 04.05.20 11:18

Реальная история, проскочившая в новостях с полгода назад.

+1
ответить

Serge712➦Paulpelz04.05.20 11:26

Может быть. Только если программист не совсем разобрался, что такое значение NULL и чем оно отличается от текста "NULL". Какой-нибудь студент двоечник, наверное. Настоящий программист такого никогда не сделает.

+2
ответить

Kelavrik_0➦Serge71204.05.20 11:38

Знаешь, частенько работаю с кодами белков, а они четырёхбуквенные, первая цифра. Типа 2ci2. И среди кодов иногда появляется нечто вроде 2e80. Так вот, гадский эксель вечно эти коды переделывает в цифры. Притом обратно не переделать. И претензии неясно к кому, разработчики экселя вполне разумно вбили анализ входных данных. Программистов много, однако. Они решают свои задачи.

+0
ответить

Serge712➦Kelavrik_004.05.20 11:48

Попробовать зафиксировать тип поля как текст? По умолчанию тип автоматический, оно само решает, как отформатировать. Буду дома, попробую. Да у меня и экселя то нет, только Libre Office.

+0
ответить

Kelavrik_0➦Serge71204.05.20 11:53

Пробовал, при вставке всё равно переделывал. Да есть приём, можно добавить подчёркивание перед кодом, введётся текст. Потом зафиксировать и заменой убрать подчёркивания.

+-1
ответить

VladV➦Kelavrik_004.05.20 12:08

Смешно и грустно, когда на это жалуются. Решений куча:
- ставьте перед значением знак ' (одинарная кавычка)
- перед присвоением значения ставьте для ячейки или всего столбца формат Text
- если в скрипте, то пишите текстовое значение в .Value, а оно принимается как есть без анализа

+-1
ответить

VladV➦Kelavrik_004.05.20 12:11

А при copy-paste надо вставлять только значения, без форматирования. Перед этим поставить ячейке формат Text.

+-1
ответить

adder38➦Kelavrik_004.05.20 12:14

Апостроф ставь в начале, тогда эксел поймёт, что это текст.

+-1
ответить

Kelavrik_0➦VladV04.05.20 12:16

А то я не знаю все эти приёмы. Да, решить через всадницу можно.
Здесь упомянул просто, чтоб пояснить ситуацию с NULL и якобы криворукими программистами.

+0
ответить

Kelavrik_0➦adder3804.05.20 12:20

И этот приём я описал, только с подчёркиванием.

+-1
ответить

Kelavrik_0➦VladV04.05.20 12:23

Как раз при копировании из экселя в эксель надо сохранять форматирование. Поясняю, сначала делается входной файл в csv формате. Там ячейки разделяются точкой с запятой. Никаких значений нет. Но приёмы с лишним символом работают.

+-1
ответить

Ale➦Kelavrik_004.05.20 15:27

Попробуйте сначала отфорамтировать клетку / стобец как text, а потом уже грузить данные

+-1
ответить

Ale➦Ale04.05.20 15:29

Еще вариант - поставить ' (одинарные кавычки) перед 2e80 и т.п.

+-1
ответить

Lawrence of Bathurst➦Kelavrik_004.05.20 16:07

Попробуйте добавлять апостроф перед кодом. Тогда Ексель понимает, что это техт.

И программистам накажите...

+-1
ответить

Kelavrik_0➦Lawrence of Bathurst04.05.20 16:16

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

+0
ответить

spamkerdyk ➦Kelavrik_004.05.20 21:22

Наконец-то встретил человека, которого такое поведение возмутило.
Когда я жаловался на это коллегам, мол что за гадость, и почему отключение не предусмотрено, они мне отвечают, мол да ладно, это особенность, надо просто помнить про нее и приспособиться.
Какого хрена я должен приспосабливаться к высокомерию программиста, который решил, что лучше меня знает, что мне надо и даже не дал мне возможности выбора?

+0
ответить

Kelavrik_0➦spamkerdyk04.05.20 21:34

Да ответ то понятен, потому как недодумали. Ну так и с NULL могли недодумать. Кстати, насчёт подтверждений. А как 3000 столбцов и строк подтверждать? Замаешься.

+-1
ответить

spamkerdyk 05.05.20 01:51

Вот, вот. Вот так, не подумав мне и отвечают. В Экселе есть выбор формата. И в этом выборе декларируется "текстовый формат", который якобы не изменяет текст, который ты вводишь в ячейку. А он изменяет. Причем не всегда, а по какому-то одному ему известному принципу - ячейка вдруг оказывается в цифровом формате, хотя вы выбирали текстовый. И проконтролировать это явным образом нельзя. Я купил Эксель в составе пакета и он оплачен. Вы предлагаете мне использовать вместо него другую программу. А деньги, отданные за Эксель, обманувший меня вы мне вернете? Чтобы я мог другую программу купить?
Только не говорите мне, что я не должен был покупать программу, которая меня не устраивает. Потому что в инструкции к этой программе эта "фича" не значится и обнаружить ее можно только поработав с уже купленной программой.
А ведь речь идет об одной из тысяч проверок, запрограммированных в Экселе. Скорее всего про нее забыли. А пакость положения в том, что Майкрософт, допустивши однажды ошибку никогда в будущем ее не исправляет. Так что даже не ждите новой версии Оффиса, где вам позволят ввести текст в ячейку так, чтобы не покурочить

+1
ответить

spamkerdyk 05.05.20 15:28

Если я "не должен" приспосабливаться к пренебрежению Майкрософт, то с чего вы взяли что я должен что-то по отношению к вам? Вот потому и "не".

+-2
ответить

Корней Сан04.05.20 11:02

Правильный номерной знак должен быть
;DROP TABLE ?;
Но кто ж даст его зарегистрировать? ;)

+6
ответить

adder38➦Корней Сан04.05.20 12:09

Конгениально

+-2
ответить

TH➦Корней Сан04.05.20 18:27

Кавычки забыл

+-2
ответить

nefanat04.05.20 10:52

отличная возможность опротестовать эти штрафы, очевидно, что они неправомерные

+1
ответить

Uncle_bl04.05.20 10:09

Бред. Интересно, как явный чайник в программировании смог сформулировать словосочетание "не присвоенное значение". Списал, скорее всего, не понимая его значения.

+-2
ответить

Serge71204.05.20 09:59

Не верю. NULL как текст не имеет ничего общего со специальным символом NULL. Просто напечатать NULL не присвоит полю значение NULL.

+2
ответить

max32➦Serge71204.05.20 11:26

еще как имеет: есть орлы присваивающие значение 'NULL' колонке varchar что делает ее визуально неотличимой от реального NULL в консоли. Ну не сцуки?

+0
ответить

Kelavrik_0➦Serge71204.05.20 11:39

Было в новостях с полгода назад. Подробности не знаю, но верю.

+-1
ответить

Serge712➦max3204.05.20 11:43

Да, если один такой писал базу данных, а другой такой зарегистрировал номер, то история вполне возможна.

+3
ответить

Общий рейтинг комментаторов
Рейтинг стоп-листов

Рейтинг@Mail.ru