Пятница — самый нерабочий день из рабочих. В нашей команде в пятницу принято делать особенные — пятничные — задачки.
Пятничная задачка — это что-то веселое, экспериментальное, полезное для продукта и приятное для разработчика. Поэтому я подготовил две темы, которые кмк и веселые и полезные.
И я хочу, чтобы вы выбрали тему на день 🤓 Я могу рассказать про свои факапы (для которых уже истёк срок НДА), или рассказать какие интересные технологии связанные с фронтенд-разработкой появляются прямо сейчас.
🤔
67.5%
факапы🤔
32.5%
интересные новые технологМне кажется, что надувать щеки и показывать какой ты классный, никогда не факапишь и вообще молодец — глупо. Все ошибаются, кто-то больше, кто-то меньше.
Ошибаться нормально, главное учиться на ошибках и не косячить два раза одинаково.
Самый старый и самый скучный. Я когда-то делал сайты на PHP за небольшие деньги, и на одном из них была самописная админка. В ней была очень тупая уязвимость — из куки читалось значение и оно отправлялось в SQL запрос без экранирования.
Соответсвенно, достаточно было угадать имя таблицы с пользователям и можно было вписать туда нового пользователя с админскими правами отправив в куке SQL-запрос.
Кстати, никто не заметил, сайт проработал пару лет, контора закрылась, все хорошо.
Любопытно, что потом, через 5 лет я встретил сайт, который делала серьёзная студия с такой же проблемой. Это вообще популярная уязвимость.
Однажды я делал небольшой бекенд на Node.js, в нем был запрос на получение всех записей пользователя. Через пару недель работы в продакшене нагрузка на сервера начала заметно расти, почему — не понятно.
Я очень долго искал проблему, пока не понял, что криво написал запрос через TypeORM, я получал все записи (не только для конкретного пользователя). А потом, уже в другом месте приложения лишние случайно отфильтровывались.
Забавно, что два бага в сумме дали корректно работающую программу и проблему мы заметили только из-за нагрузки на процессор (фильтровались миллионы записей на каждый запрос).
Как-то раз я делал сайт, и из-за криворукости переодически приходилось лазить руками в базу, чтобы исправить какие-то проблемки.
База была в контейнере на сервере и в нормальной жизни вообще не торчала наружу — доступ до неё был только внутри локальной сети на сервере.
Но чтобы залезть туда со своего компьютера, я ее высовывал наружу. И в однин прекрасный момент забыл спрятать обратно 🤪
А потом обнаружилось, что на сайте сломалось все — на клиенте любой запрос заканчивался ошибкой 500.
В логах были странные сообщения — схема базы не соответствовала представляем приложения о схеме. Я зашёл в базу, а там одна таблица README, в которой одна строчка — сообщение, что база похищена и требования выкупа в биткоинах.
Это, пожалуй, был самый страшный факап в моей жизни.
Но, все закончилось плюс-минус хорошо, базу восстановили из бекапа и кажется, заказчик не имел претензий. И, даже, похоже что похититель никуда не выложил украденные данные.
После следующего факапа я приучил себя читать исходный код используемой библиотеки 😝
Делал приложение, которое должно было поддерживать не самые свежие браузеры (типо ie11). И после очередного релиза оно начало валиться прямо сразу, до белого экрана.
В консоли сообщение, что const — это не понятно. Логично, да.
Оказалось, что одна из библиотек поставлялась в современном js, и мы не бабелили ее, конечно. Исправили быстро, но было неприятно.
С тех пор я топлю за то, чтобы библиотеки ВСЕ поставлялись в виде максимально современного js, а я бы уже сам решил до какой версии их бабелить 🤗
И тогда же привык смотреть что вообще на зависимость которую я ставлю, читать ее исходные тексты и смотреть, что по факту прилетает в бандл. Потом это помогло мне избежать гигантского числа проблем.
На этом все, простите, но челюсть болит так, что даже сериал смотреть тяжело, не то что писать что-то осмысленно.