История №1109877
Интересна история попытки хакнуть систему с помощью номерного знака. Американский программист Джозеф Тартаро зарегистрировал автомобильный знак NULL. Дело в том, что во многих языках программирования, в том числе SQL, используемом для работы с базами данных, NULL используется в качестве идентификатора отсутствующего или неприсвоенного значения. Идея заключалась в том, что таким образом можно будет избежать штрафов, потому что система не сможет корректно обрабатывать его номерной знак.
К сожалению, произошло прямо противоположное. Когда его номер попал в базу данных, система связала номерной знак NULL с его адресом. А потом она отправила ему ВСЕ остальные штрафные квитанции, у которых не было реального номерного знака. Общая стоимость штрафов составила $12 049.
Работал я с женщиной, индийского происхождения, которую зовут Ankita Nosurnameused
Ну в общем, способ сработал. Он, конечно, оспорит все штрафы, выиграет и после этого может спокойно "грешить", ибо прецедент уже есть.
Хотя думаю его заставили бы сменить номер :)
Давно байка ходит...
https://utro.ru/articles/2004/07/26/333532.shtml
Omeganian ★➦Omeganian• 04.05.20 18:50
Даже дольше
https://www.snopes.com/fact-check/auto-no-plate/
Это не возможно. Даже в случае сбора SQL стейтмента методом конкатенации получится условие типа "where a.number = 'NULL'". Это принципиально отлично от "where a.number is NULL".
ystervark➦dkurilov• 04.05.20 16:54
Если нормально делать, то да, невозможно. Там, на Хабре, в комментарии, пишут: " Для номера машины в базе данных выделена строковая переменная, в которую заносят значение «NULL» если номер не определён.". У таких дятлов возможно все.
В саму историю как-то не очень верится, но вообще атака на SQL через данные вполне возможна. Обычно, правда, она делается путем вставления кавычек в текстовые поля. А просто нефиг строить оператор SQL при помощи конкатенации строчек. А prepared statement даже и строчки NULL не убоится.
Минус за CTRL+С, CTRL+V.
Конечно это тоже не оригинал, но https://habr.com/ru/news/t/463679/
Troomann➦Скарборо• 04.05.20 16:02
Во-первых, это не запрещено - в особенности если, как в данном случае, автором - или редактором - указан источник.
Во-вторых, в большинстве источников (в т.ч. на хабре) как автор предполагавшегося хака указывается докладчик DEF CON под ником Droogie.
То, что здесь всплыл Джозеф Тартаро (Josef Tartaro), говорит о том, что автор истории использовал другие - или разные - источники.
Kelavrik_0➦Скарборо• 04.05.20 16:21
Всё же всегда веселят блюстители авторских прав, которые не могут посмотреть на источник. Смотрим историю, там под голосованием есть ссылка и о чудо, она совпадает с вашей.
+180–
Toritoka
Сайт: https://habr.com/ru/news/t/463679/
Выпуск: истории основные 04 мая 2020
Даже если история недостоверна, то всё-таки забавна. "Хорошо, когда кто врёт врёт весело и складно".
Хотя,все может быть. Если программист, который писал базу данных, сделал ошибку и вместо NULL написал "NULL", в текстовое поле номера запишется текст "NULL" вместо специального значения NULL.
Вторая часть истории, получил штрафы за всех неопознанных, теоретически возможна.
Serge712➦Paulpelz• 04.05.20 11:26
Может быть. Только если программист не совсем разобрался, что такое значение NULL и чем оно отличается от текста "NULL". Какой-нибудь студент двоечник, наверное. Настоящий программист такого никогда не сделает.
Kelavrik_0➦Serge712• 04.05.20 11:38
Знаешь, частенько работаю с кодами белков, а они четырёхбуквенные, первая цифра. Типа 2ci2. И среди кодов иногда появляется нечто вроде 2e80. Так вот, гадский эксель вечно эти коды переделывает в цифры. Притом обратно не переделать. И претензии неясно к кому, разработчики экселя вполне разумно вбили анализ входных данных. Программистов много, однако. Они решают свои задачи.
Serge712➦Kelavrik_0• 04.05.20 11:48
Попробовать зафиксировать тип поля как текст? По умолчанию тип автоматический, оно само решает, как отформатировать. Буду дома, попробую. Да у меня и экселя то нет, только Libre Office.
Kelavrik_0➦Serge712• 04.05.20 11:53
Пробовал, при вставке всё равно переделывал. Да есть приём, можно добавить подчёркивание перед кодом, введётся текст. Потом зафиксировать и заменой убрать подчёркивания.
VladV➦Kelavrik_0• 04.05.20 12:08
Смешно и грустно, когда на это жалуются. Решений куча:
- ставьте перед значением знак ' (одинарная кавычка)
- перед присвоением значения ставьте для ячейки или всего столбца формат Text
- если в скрипте, то пишите текстовое значение в .Value, а оно принимается как есть без анализа
VladV➦Kelavrik_0• 04.05.20 12:11
А при copy-paste надо вставлять только значения, без форматирования. Перед этим поставить ячейке формат Text.
adder38➦Kelavrik_0• 04.05.20 12:14
Апостроф ставь в начале, тогда эксел поймёт, что это текст.
Kelavrik_0➦VladV• 04.05.20 12:16
А то я не знаю все эти приёмы. Да, решить через всадницу можно.
Здесь упомянул просто, чтоб пояснить ситуацию с NULL и якобы криворукими программистами.
Kelavrik_0➦VladV• 04.05.20 12:23
Как раз при копировании из экселя в эксель надо сохранять форматирование. Поясняю, сначала делается входной файл в csv формате. Там ячейки разделяются точкой с запятой. Никаких значений нет. Но приёмы с лишним символом работают.
Ale➦Kelavrik_0• 04.05.20 15:27
Попробуйте сначала отфорамтировать клетку / стобец как text, а потом уже грузить данные
Lawrence of Bathurst➦Kelavrik_0• 04.05.20 16:07
Попробуйте добавлять апостроф перед кодом. Тогда Ексель понимает, что это техт.
И программистам накажите...
Kelavrik_0➦Lawrence of Bathurst• 04.05.20 16:16
Ох уж эти советчики, можно подумать, будто я не нашёл способа решить проблему. Естественно как заметил, так сразу и решил.
Здесь я упомянул о ней только по одной причине. Проблема неправильной интерпретации данных совершенно реальна. И это не означает будто программисты - дураки. В другой ситуации совершенно нормально записывать число с экспонентой.
spamkerdyk ★➦Kelavrik_0• 04.05.20 21:22
Наконец-то встретил человека, которого такое поведение возмутило.
Когда я жаловался на это коллегам, мол что за гадость, и почему отключение не предусмотрено, они мне отвечают, мол да ладно, это особенность, надо просто помнить про нее и приспособиться.
Какого хрена я должен приспосабливаться к высокомерию программиста, который решил, что лучше меня знает, что мне надо и даже не дал мне возможности выбора?
Kelavrik_0➦spamkerdyk• 04.05.20 21:34
Да ответ то понятен, потому как недодумали. Ну так и с NULL могли недодумать. Кстати, насчёт подтверждений. А как 3000 столбцов и строк подтверждать? Замаешься.
Вот, вот. Вот так, не подумав мне и отвечают. В Экселе есть выбор формата. И в этом выборе декларируется "текстовый формат", который якобы не изменяет текст, который ты вводишь в ячейку. А он изменяет. Причем не всегда, а по какому-то одному ему известному принципу - ячейка вдруг оказывается в цифровом формате, хотя вы выбирали текстовый. И проконтролировать это явным образом нельзя. Я купил Эксель в составе пакета и он оплачен. Вы предлагаете мне использовать вместо него другую программу. А деньги, отданные за Эксель, обманувший меня вы мне вернете? Чтобы я мог другую программу купить?
Только не говорите мне, что я не должен был покупать программу, которая меня не устраивает. Потому что в инструкции к этой программе эта "фича" не значится и обнаружить ее можно только поработав с уже купленной программой.
А ведь речь идет об одной из тысяч проверок, запрограммированных в Экселе. Скорее всего про нее забыли. А пакость положения в том, что Майкрософт, допустивши однажды ошибку никогда в будущем ее не исправляет. Так что даже не ждите новой версии Оффиса, где вам позволят ввести текст в ячейку так, чтобы не покурочить
Если я "не должен" приспосабливаться к пренебрежению Майкрософт, то с чего вы взяли что я должен что-то по отношению к вам? Вот потому и "не".
Правильный номерной знак должен быть
;DROP TABLE ?;
Но кто ж даст его зарегистрировать? ;)
отличная возможность опротестовать эти штрафы, очевидно, что они неправомерные
Бред. Интересно, как явный чайник в программировании смог сформулировать словосочетание "не присвоенное значение". Списал, скорее всего, не понимая его значения.
Не верю. NULL как текст не имеет ничего общего со специальным символом NULL. Просто напечатать NULL не присвоит полю значение NULL.
max32➦Serge712• 04.05.20 11:26
еще как имеет: есть орлы присваивающие значение 'NULL' колонке varchar что делает ее визуально неотличимой от реального NULL в консоли. Ну не сцуки?
Kelavrik_0➦Serge712• 04.05.20 11:39
Было в новостях с полгода назад. Подробности не знаю, но верю.
Serge712➦max32• 04.05.20 11:43
Да, если один такой писал базу данных, а другой такой зарегистрировал номер, то история вполне возможна.