Alexander | Cododel
Есть подозрение еще на 2 сервера в standalone next-server в тонком оптимизированном Docker контейнере с ограниченными правами.
Через профайлинг удалось выяснить что нагрузка вся ложится в middleware слое, а так же были ошибки обработки в заголовках, которые могли бы использоваться для эксплуатации уязвимости.
Теоретически - вполне возможно майнер запустить прям в рантайме процесса next-server через WASM
Возможно не майнер конечно, но вполне могут быть последствия попытки взлома тк версия уязвима к ним
Через профайлинг удалось выяснить что нагрузка вся ложится в middleware слое, а так же были ошибки обработки в заголовках, которые могли бы использоваться для эксплуатации уязвимости.
Теоретически - вполне возможно майнер запустить прям в рантайме процесса next-server через WASM
Возможно не майнер конечно, но вполне могут быть последствия попытки взлома тк версия уязвима к ним
То была не уязвимость NextJS, а уязвимость системы локализации на проекте в виде бага, вот пост мортем:
Этому багу 4 месяца, но вскрылся только сейчас, тк сайт заметили боты и стали пробовать искать уязвимсти, вскрыв баг на одном из даже неиспользуемых в проекте адресов, на которых есть один механизм в nextjs, который мы тоже не используем
От того сложно было выявить проблему, пришлось из оперативной памяти сервера делать снимок и разбирать его, в поисках причины
Валидацией языка занимается middleware, в котором исключены служебные пути nextjs среди которых есть и api
И тогда отправив запрос на api, который у нас не используется - middleware с валидацией пропускается, сразу api забирается как язык, но дальнейший рендеринг попадает в layout и не находит страницу соответствующуб, начинает рендерить 404 ошиибку, которая зависит языка, а язык у нас уже утвержден как API - 404 ошибка запрашивает такой язык, из-за чего происходит новая ошибка, уже 500, она тоже у нас тилизована, начинает рендериться, по уже утвержденному языку вызывает локаль api и снова вызывает ошибку, а дальше бесконечный круг на 500 ошибке
Дело даже не в нагрузке, а просто одного запроса достаточно чтобы вызывать замкнутый круг в котором зависает сервер
Alexander | Cododel
То была не уязвимость NextJS, а уязвимость системы локализации на проекте в виде бага, вот пост мортем: Этому багу 4 месяца, но вскрылся только сейчас, тк сайт заметили боты и стали пробовать искать уязвимсти, вскрыв баг на одном из даже неиспользуемых в…
отчет намеренно упрощенный для заказчика, а на самом деле выявляется проблема так:
я в контейнере установил socat, запустил дебаггер nodejs, прокинул порт на локльную машину, по ssh открыл туннель к контейнеру через соединение с сервером, на ноуте через Chrome Remote NodeJS Debug Tools запустил Profiler, в нем отсортировал BottomUp по Self Time, взял самый долгий вызов, открыл файл рантайма исодников на строке, через дебаггер с брейкпоинтами и отлов исключений выявил проблемный path запроса и компонент, который в этот момент рендерится, какие вызовы происходят.
Оказалось это
Локальная проверка дала положительный результат, фронт ложится с одного запроса, и только с
Детальный анализ исходников показал что у нас просто не используется в проекте
Вотъ и фсё.
Думаю это будет эталоном построения логических цепочек, на котором я буду учить людей 😅
Кто еще не умеет дебажить - пишите, научу,дорого 👐
я в контейнере установил socat, запустил дебаггер nodejs, прокинул порт на локльную машину, по ssh открыл туннель к контейнеру через соединение с сервером, на ноуте через Chrome Remote NodeJS Debug Tools запустил Profiler, в нем отсортировал BottomUp по Self Time, взял самый долгий вызов, открыл файл рантайма исодников на строке, через дебаггер с брейкпоинтами и отлов исключений выявил проблемный path запроса и компонент, который в этот момент рендерится, какие вызовы происходят.
Оказалось это
/api, рендерится компонент 404, проблема рядом с i18next.Локальная проверка дала положительный результат, фронт ложится с одного запроса, и только с
/apiДетальный анализ исходников показал что у нас просто не используется в проекте
/api, так что путь [locale] отлавливал его как локаль вобход middleware, который должен валидировать локали, и сразу попадал в рендер, зависимый от локали и вызывал Exception LoopВотъ и фсё.
Думаю это будет эталоном построения логических цепочек, на котором я буду учить людей 😅
Кто еще не умеет дебажить - пишите, научу,
Please open Telegram to view this post
VIEW IN TELEGRAM
Я не Реактолог.
Осмелился спросить у агента, он подтвердил мои сомнения.
Я подсознательно вспомнил как работает это во VueJS 😅
Хотя и не работал с Vue уже 3 года, но всё же 25 минут сейчас тупил и не мог понять, почему data-active={false} всё равно рендерит этот аттрибут со строковым значением "false"
Осмелился спросить у агента, он подтвердил мои сомнения.
Я подсознательно вспомнил как работает это во VueJS 😅
Хотя и не работал с Vue уже 3 года, но всё же 25 минут сейчас тупил и не мог понять, почему data-active={false} всё равно рендерит этот аттрибут со строковым значением "false"
🗿1
Идея PayloadCMS кажется интересной.
Я сейчас подумал, ведь можно использовать
А возможно это по той причине, что весь проект полностью находится в одном пространстве и имеет Shared
Звучит прикольно, но мне до сих пор не понятна идея HeadlessCMS в плане того, что пол проекта находится в базе данных...
Ну как версионировать и безопасно обновляться? Не пойму пока...
Я сейчас подумал, ведь можно использовать
unstable_cache для множества данных, и при грамотном управлении ревалидацией при обновлении данных можно получить почти SSG производительность на SSR с админкой и без пересборки проекта 🤔А возможно это по той причине, что весь проект полностью находится в одном пространстве и имеет Shared
unstable_cache, так сразу после внесения изменений - автор же и кеширует их. Звучит прикольно, но мне до сих пор не понятна идея HeadlessCMS в плане того, что пол проекта находится в базе данных...
Ну как версионировать и безопасно обновляться? Не пойму пока...
Отвлекся на уведомление в тиктоке
Я понял куда девается время, в этот раз таймтрекер зафиксировал утечку😅
Новости и факты в рекомендациях конечно интересные
Я понял куда девается время, в этот раз таймтрекер зафиксировал утечку
Новости и факты в рекомендациях конечно интересные
Please open Telegram to view this post
VIEW IN TELEGRAM
Такой промпт составляет визуальный редактор сайта в Cursor
Ранее был переработан режим браузера в Cursor
Штука конечно интересная, может быть в каких-то кейсах применимая, но лично мне, как противнику любых конструкторов сайтов — это тоже кажется избыточным слоем, который снижает продуктивность, и накладывает некоторые ограничения.
В интерфейсах — Я просто чувствую руки связанными.
Ну и на скрине есть повод поразмышлять над тем, как это работает, и как лучше с этим взаимодействовать.
О чем и напишу в следующем посте.
Ранее был переработан режим браузера в Cursor
Штука конечно интересная, может быть в каких-то кейсах применимая, но лично мне, как противнику любых конструкторов сайтов — это тоже кажется избыточным слоем, который снижает продуктивность, и накладывает некоторые ограничения.
В интерфейсах — Я просто чувствую руки связанными.
Ну и на скрине есть повод поразмышлять над тем, как это работает, и как лучше с этим взаимодействовать.
О чем и напишу в следующем посте.
👍1
Как работает визуальный редактор в Cursor
Теперь при запуске любой команды, слушающей какой-либо порт, Cursor предлагает открыть его в встроенном браузере, с возможностью выделения и редактирования контента на сайте - от текста до стилей, и даже абсолютного позиционирования.
При внесении изменений появляется кнопка Apply
Это всё дело помещается в контест чата и агент старается привести код проекта к указанному состоянию.
Пример:
Я просто выделил span, и убрал у него в стилях значение white-space, а получил огромный промпт с кучей правил и огромным селектором.
А как решение, на GPT-5.1-codex-mini (medium) я получил не самый хороший результат, но рабочий:
Модель не прямо следовала указаниям, а правильно поняла намерение. Не остановилась на том, что white-space нет в стилях (это стили библиотеки), а поняла что я хочу включить перенос строк.
Нашла компонент, CSS класс элемента и добавила в него вложенные стили в соответсвии с прописанными Cursor Rules.
Но результат получился не очень... (см скрин) Надо бы и с высотой поработать.
Что еще хуже: Изменение было применено к ui компоненту, что приведет к изменениям на всём сайте полностью.
А требуется лишь изменение частного случая...
Это уже не совсем полноценный агент, а буквально "умный" редактор сайтов, который будет сам чот себе там думать, но выполнит просьбу не докапываясь, в отличие от настоящего разработчика.
А настоящие редакторы сайтов обычно для каждого элемента имеют свой стейт, и почти никогда не предоставляют компонентный подход с переиспользованием.
Хотел рассказать о том как сделать лучше, но в процессе выяснил, что мне не нравится структура кнопки в библиотеке, и надо думать самому) Ну я так считаю, а в целом можно попробовать с ИИ решить проблему, но я думаю на это уйдет много времени и токенов.
Думаю основная проблема в ошибках на истоке проекта, я вообще против любых фиксированных размеров, а тут кнопки с фикс высотой...
Теперь при запуске любой команды, слушающей какой-либо порт, Cursor предлагает открыть его в встроенном браузере, с возможностью выделения и редактирования контента на сайте - от текста до стилей, и даже абсолютного позиционирования.
При внесении изменений появляется кнопка Apply
Это всё дело помещается в контест чата и агент старается привести код проекта к указанному состоянию.
Пример:
Я просто выделил span, и убрал у него в стилях значение white-space, а получил огромный промпт с кучей правил и огромным селектором.
А как решение, на GPT-5.1-codex-mini (medium) я получил не самый хороший результат, но рабочий:
Модель не прямо следовала указаниям, а правильно поняла намерение. Не остановилась на том, что white-space нет в стилях (это стили библиотеки), а поняла что я хочу включить перенос строк.
Нашла компонент, CSS класс элемента и добавила в него вложенные стили в соответсвии с прописанными Cursor Rules.
Но результат получился не очень... (см скрин) Надо бы и с высотой поработать.
Что еще хуже: Изменение было применено к ui компоненту, что приведет к изменениям на всём сайте полностью.
А требуется лишь изменение частного случая...
Это уже не совсем полноценный агент, а буквально "умный" редактор сайтов, который будет сам чот себе там думать, но выполнит просьбу не докапываясь, в отличие от настоящего разработчика.
А настоящие редакторы сайтов обычно для каждого элемента имеют свой стейт, и почти никогда не предоставляют компонентный подход с переиспользованием.
Хотел рассказать о том как сделать лучше, но в процессе выяснил, что мне не нравится структура кнопки в библиотеке, и надо думать самому) Ну я так считаю, а в целом можно попробовать с ИИ решить проблему, но я думаю на это уйдет много времени и токенов.
Думаю основная проблема в ошибках на истоке проекта, я вообще против любых фиксированных размеров, а тут кнопки с фикс высотой...
⚡3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from (НЕ)Экономист! | Cododel Crypto | Alexander (Alexander Cododel)
Оформил крипто карту Bybit Card
На российский паспорт😎
Boom 💥 Мазафака!
Теперь официально помогаю с оформлением зарубежных карт и криптокарт! (Беларусь, Казахстан, ByBit)
Если чо кому интересно пишите, не бесплатно, но помогу, теперь есть из чего выбирать😉
На российский паспорт
Boom 💥 Мазафака!
Теперь официально помогаю с оформлением зарубежных карт и криптокарт! (Беларусь, Казахстан, ByBit)
Если чо кому интересно пишите, не бесплатно, но помогу, теперь есть из чего выбирать
Please open Telegram to view this post
VIEW IN TELEGRAM
Подъехали итоги когда по Raycast
• Usage
Хотя я систему переставлял на ноуте, но это самая правдивая метрика о моей продуктивности.
Я пожалуй соглашусь, что работаю и вообще активен после обеда только, и часто в понедельник я на мотивации очень активен, а потом энтузизм спадает.
Всё видно на инфографике
• Extensions
Сразу после переустановки - я пробовал пользоваться ИИ в raycast, так как идея с ИИ на хоткеях, в унивесальном интерфейсе и связке с другими тулзами — казалась очень крутой.
Идея так и осталась казаться крутой, но по факту же интерфейс чата требует сильных доработок.
Хоткеи неудобные, гибкая система с настройкой тулзов требует слишком много действий, чтобы быстро их переключать, переход от QuickAI к окну чата прост, а вот обратно вообще не очевиден...
В целом прикольно, если постараться привыкнуть, но я считаю, что сейчас на столько всё быстро меняется, что если не привыклось само собой, то оно и не нужно.
Аналогично с cURL клиентом. Идея крутая, но реализация под вопросом... Мне нехватает бесшовности интеграции натурального cli интерфейса и хоткейного в расширении. Просто возможность подгрузить curl запрос в расширение - было бы очень удобно. А так это обычная поделка, по типу моего JS Playground на сайте, где только немногие будут восхищаться, потому что 99% людям хватает и калькулятора. А кому - то ИИ нагенерит и сам исполнит кода, ему достаточно будет. Мне же интересно самому цеочку логики и расчетов выстроить. Тут та же история - сесть собрать запрос, поиграться, но не применимо в моей работе точно. Insomnia, Postman хоть и более тяжеловестные решения, но даже они гораздо более применимы тут.
А вот clipboard history, color picker, kill process - просто Must Have. Не часто, но очень метко и предсказуемо выручают.
Jitsi - отдельное внимание, гениальное решение, получать ссылку на безлимитный созвон в опенсорсной звонилке, без посредников.
• Application
Это уже не совсем точно отражает реальное положение, того как задуман raycast. Потому что я пользуюсь CharmStone - и у меня 16 приложений просто на жестах завязаны.
В raycast же запускаю только что-то, что не часто пригождается.
Соответственно это топ приложений, которые я не часто использую, с небольшими поправками, что антигравити уже на жестах, гпт был на хоткеях и жестах, shadowrocket был на жестах до обновления, dbeaver тоже на жесты повесил.
Ну тут пожалуй самый не объективный слайд.
Но сафари - правда я чаще всего запускаю, из программ, которые не использую на постоянке
• Summary
Вот сюда отдельное внимание наверное.
Пик активности 23:00 - так живет прокрастинатор, у которого в полночь обнуляется период по таймтрекеру 🤭
---
• Usage
Хотя я систему переставлял на ноуте, но это самая правдивая метрика о моей продуктивности.
Я пожалуй соглашусь, что работаю и вообще активен после обеда только, и часто в понедельник я на мотивации очень активен, а потом энтузизм спадает.
Всё видно на инфографике
• Extensions
Сразу после переустановки - я пробовал пользоваться ИИ в raycast, так как идея с ИИ на хоткеях, в унивесальном интерфейсе и связке с другими тулзами — казалась очень крутой.
Идея так и осталась казаться крутой, но по факту же интерфейс чата требует сильных доработок.
Хоткеи неудобные, гибкая система с настройкой тулзов требует слишком много действий, чтобы быстро их переключать, переход от QuickAI к окну чата прост, а вот обратно вообще не очевиден...
В целом прикольно, если постараться привыкнуть, но я считаю, что сейчас на столько всё быстро меняется, что если не привыклось само собой, то оно и не нужно.
Аналогично с cURL клиентом. Идея крутая, но реализация под вопросом... Мне нехватает бесшовности интеграции натурального cli интерфейса и хоткейного в расширении. Просто возможность подгрузить curl запрос в расширение - было бы очень удобно. А так это обычная поделка, по типу моего JS Playground на сайте, где только немногие будут восхищаться, потому что 99% людям хватает и калькулятора. А кому - то ИИ нагенерит и сам исполнит кода, ему достаточно будет. Мне же интересно самому цеочку логики и расчетов выстроить. Тут та же история - сесть собрать запрос, поиграться, но не применимо в моей работе точно. Insomnia, Postman хоть и более тяжеловестные решения, но даже они гораздо более применимы тут.
А вот clipboard history, color picker, kill process - просто Must Have. Не часто, но очень метко и предсказуемо выручают.
Jitsi - отдельное внимание, гениальное решение, получать ссылку на безлимитный созвон в опенсорсной звонилке, без посредников.
• Application
Это уже не совсем точно отражает реальное положение, того как задуман raycast. Потому что я пользуюсь CharmStone - и у меня 16 приложений просто на жестах завязаны.
В raycast же запускаю только что-то, что не часто пригождается.
Соответственно это топ приложений, которые я не часто использую, с небольшими поправками, что антигравити уже на жестах, гпт был на хоткеях и жестах, shadowrocket был на жестах до обновления, dbeaver тоже на жесты повесил.
Ну тут пожалуй самый не объективный слайд.
Но сафари - правда я чаще всего запускаю, из программ, которые не использую на постоянке
• Summary
Вот сюда отдельное внимание наверное.
Пик активности 23:00 - так живет прокрастинатор, у которого в полночь обнуляется период по таймтрекеру 🤭
---
Я слышал на винду релиз готовили, они уже вышли в Beta.
Тестили? Как вам?
Кто-нибудь хочет поработать в сложном, модном, перспективном стартапе за идею и бесплатный доступ к продукту?
🤡5👍1😁1