Web Stack
4.07K subscribers
874 photos
5 videos
1.84K links
Дайджест web разработчика: статьи, туториалы, практики и полезные инструменты.

Админ: @jem_jem
Реклама: http://bit.ly/2wZeIPj

👉 Дайджест мобильной разработки @mobile_dvlp
Download Telegram
Node2Shell уже видит атаки на уязвимость Brotli в Node.js

ELLIO сообщает о реальном exploit-трафике для RCE в Brotli, который закрыли в релизах Node.js. Уязвимость живёт в библиотеке Google, поэтому патч нужен и там, где Brotli встроен в другой софт.

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

https://ellio.tech/en/blog/node2shell-cve-2026-111497-rce-on-stock-nodejs-builds/
❤1👍1
Как AI-поиск меняет видимость сайтов

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

Модели смотрят на смысл, свежесть, факты и структуру страницы, а не только на ключевые слова. Если контент не подтверждается внешними источниками или перегружен повторениями, его чаще отбрасывают.

https://www.freecodecamp.org/news/ai-search-visibility/
Сниппет для Quill в Next.js без лишнего SSR

Когда один и тот же WYSIWYG-редактор нужен и для ввода, и для просмотра, важно не тащить его на сервер и не смешивать состояние заметки с состоянием самого Quill. В этом фрагменте редактор грузится только в браузере, а highlight.js подключается отдельно для подсветки кода.

"use client";

import dynamic from "next/dynamic";
import hljs from "highlight.js";

if (typeof window !== "undefined") {
window.hljs = hljs;
}

const ReactQuill = dynamic(
async () => (await import("react-quill-new")).default,
{ ssr: false }
);


Учтите: такой подход подходит только для client-side редактора; если вам нужен контент на сервере без гидрации, придется отдельно продумывать viewer и формат хранения HTML.

https://habr.com/ru/articles/1101222/
WordPress научился считать глубину дочитывания

Плагин AnGo Scroll Analytics для WordPress считает не среднюю прокрутку, а процентили глубины дочитывания. Так видно, где читатели отваливаются, и где до конца доходят только самые заинтересованные.

Трекер весит около 6 килобайт и шлёт данные через sendBeacon, а на сервере защищён от дублей через upsert с GREATEST(). Для точных цифр нужно учитывать отскоки, а также не ломать сборку на кэше, блокировщиках и залогиненных пользователях.

https://habr.com/ru/articles/1100670/
❤2
Foldkit строит фронтенд на Effect

Foldkit — TypeScript-фреймворк для фронтенда на Effect, где состояние и побочные эффекты вынесены в явную модель. Маршруты, серверный рендеринг и UI-компоненты тоже живут в одной схеме, поэтому поведение приложения проще отслеживать и тестировать.

Одна неизменяемая Model хранит всё состояние, а изменения проходят через один update. Для проекта нужна готовность работать по архитектуре Effect, иначе переход с React-стека будет слишком тяжёлым.

https://foldkit.dev/
👍1
Как Sentry убрала 28 тысяч строк мёртвого кода

В Sentry убрали 28 тысяч строк неиспользуемого кода с помощью Knip, а доклад об этом показали на нескольких конференциях. Knip сканирует проект и находит файлы, экспорты и зависимости, которые больше нигде не используются.

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

https://tkdodo.eu/blog/dead-code-shouldnt-exist
❤1
Structs Docs: TC39 structs уже можно попробовать

Появилась реализация предложения TC39 Structs для JavaScript, включая structs, shared structs, SharedArray и Atomics.Mutex с Atomics.Condition. Она сочетает рантайм по алгоритмам спецификации и компилятор, который разбирает новый синтаксис. В TypeScript компилятор ещё и подставляет типы, чтобы доступ к полям shared struct был прямым. Пакет @arv/structs ставит глобальные объекты, а в браузере всё можно запустить в playground рядом с скомпилированным JavaScript.

https://structs.arv.tools/
Вышел DuckDB 2.0.0 LTS Cinnamon Teal

DuckDB 2.0.0 LTS Cinnamon Teal вышел как долгосрочный релиз аналитической SQL-базы, которую встраивают прямо в приложение. Он умеет быстро читать большие наборы данных локально и выполнять запросы без отдельного сервера.

Для LTS-ветки важна стабильность API, но часть новых возможностей появляется только в свежих сборках. Если вы держите аналитику рядом с кодом, стоит проверить совместимость расширений и обновить миграции.

https://duckdb.org/2026/10/21/announcing-duckdb-200
Вышел курс по практическому пентесту

На freeCodeCamp.org вышел 2,5-часовой курс по этичному взлому и основам offensive security. Его ведёт преподаватель по кибербезопасности Declan Middleton, а упражнения проходят на отдельной CTF-машине. Внутри разбирают работу в Linux, разведку сети через Nmap, поиск скрытых путей и файлов, а также перехват HTTP-запросов в Burp Suite. Для практики нужны изолированная лаборатория и базовое знание терминала, иначе часть шагов будет трудно повторить.

https://www.freecodecamp.org/news/learn-real-world-penetration-testing-hands-on-ethical-hacking-crash-course/
👍3
Где CSS подложил вам ловушки

CSS иногда ведёт себя не так, как ожидается, даже у опытных людей. Здесь собраны несколько ловушек: у :has(), :is() и :where() специфичность может вырасти из-за самого списка селекторов, даже если часть условий не найдётся в DOM.

position: fixed перестаёт фиксироваться, если у предка есть transform, filter, perspective, backdrop-filter или некоторые значения contain и will-change. При line-height коэффициент пересчитывается при смене размера шрифта, а процент превращается в число один раз, поэтому для адаптивной типографики это важно проверить.

https://habr.com/ru/companies/ruvds/articles/1097580/
❤1👍1
Вышел бесплатный курс по безопасности MCP

Model Context Protocol связывает LLM с внешними инструментами, базами данных и API, а новый бесплатный курс учит защищать такие интеграции. В нём разбирают, как агент можно заставить выполнить вредное действие через уязвимые данные и связи. Если у агента есть доступ к приватным данным, он читает и внешние источники, а ещё умеет отправлять данные наружу, возникает опасная комбинация. Вместо хрупких фильтров подсказок курс советует строить архитектурные границы и сразу проверять, не открыли ли вы агенту лишние права.

https://www.freecodecamp.org/news/secure-your-ai-agents-free-model-context-protocol-mcp-security-course/