🔥

Тред (Игорь Камышев)


Пятница — самый нерабочий день из рабочих. В нашей команде в пятницу принято делать особенные — пятничные — задачки.

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

И я хочу, чтобы вы выбрали тему на день 🤓 Я могу рассказать про свои факапы (для которых уже истёк срок НДА), или рассказать какие интересные технологии связанные с фронтенд-разработкой появляются прямо сейчас.
🤔 67.5% факапы
🤔 32.5% интересные новые технолог

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

Самый старый и самый скучный. Я когда-то делал сайты на PHP за небольшие деньги, и на одном из них была самописная админка. В ней была очень тупая уязвимость — из куки читалось значение и оно отправлялось в SQL запрос без экранирования.

Соответсвенно, достаточно было угадать имя таблицы с пользователям и можно было вписать туда нового пользователя с админскими правами отправив в куке SQL-запрос.

Кстати, никто не заметил, сайт проработал пару лет, контора закрылась, все хорошо.

Любопытно, что потом, через 5 лет я встретил сайт, который делала серьёзная студия с такой же проблемой. Это вообще популярная уязвимость.

Однажды я делал небольшой бекенд на Node.js, в нем был запрос на получение всех записей пользователя. Через пару недель работы в продакшене нагрузка на сервера начала заметно расти, почему — не понятно.

Я очень долго искал проблему, пока не понял, что криво написал запрос через TypeORM, я получал все записи (не только для конкретного пользователя). А потом, уже в другом месте приложения лишние случайно отфильтровывались.

Забавно, что два бага в сумме дали корректно работающую программу и проблему мы заметили только из-за нагрузки на процессор (фильтровались миллионы записей на каждый запрос).

Как-то раз я делал сайт, и из-за криворукости переодически приходилось лазить руками в базу, чтобы исправить какие-то проблемки.

База была в контейнере на сервере и в нормальной жизни вообще не торчала наружу — доступ до неё был только внутри локальной сети на сервере.

Но чтобы залезть туда со своего компьютера, я ее высовывал наружу. И в однин прекрасный момент забыл спрятать обратно 🤪

А потом обнаружилось, что на сайте сломалось все — на клиенте любой запрос заканчивался ошибкой 500.

В логах были странные сообщения — схема базы не соответствовала представляем приложения о схеме. Я зашёл в базу, а там одна таблица README, в которой одна строчка — сообщение, что база похищена и требования выкупа в биткоинах.

Это, пожалуй, был самый страшный факап в моей жизни.

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

После следующего факапа я приучил себя читать исходный код используемой библиотеки 😝

Делал приложение, которое должно было поддерживать не самые свежие браузеры (типо ie11). И после очередного релиза оно начало валиться прямо сразу, до белого экрана.

В консоли сообщение, что const — это не понятно. Логично, да.

Оказалось, что одна из библиотек поставлялась в современном js, и мы не бабелили ее, конечно. Исправили быстро, но было неприятно.

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

И тогда же привык смотреть что вообще на зависимость которую я ставлю, читать ее исходные тексты и смотреть, что по факту прилетает в бандл. Потом это помогло мне избежать гигантского числа проблем.

На этом все, простите, но челюсть болит так, что даже сериал смотреть тяжело, не то что писать что-то осмысленно.