Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Свежая подборка новостей и материалов.
Новости, события
Выпущены Go 1.20.3 и 1.19.8 - эти выпуски включают исправления безопасности
go/parser: бесконечный цикл при разборе.
Вызов любой из функций Parse в исходном коде Go, который содержит директивы //line с очень большими номерами строк, может вызвать бесконечный цикл из-за целочисленного переполнения.
html/template: обратные кавычки не рассматриваются как разделители строк
Шаблоны не учитывали обратные кавычки (`) как разделители строк Javascript и поэтому не экранировали их, как ожидалось. Обратные кавычки используются, начиная с ES6, для литералов шаблонов JS. Если шаблон
содержал действие шаблона Go в литерале шаблона Javascript, содержимое действия можно было бы использовать для завершения литерала, внедряя произвольный код Javascript в шаблон Go.
net/http, net/textproto: чрезмерное выделение памяти, при анализе заголовков HTTP и MIME может выделяться большой объем памяти даже при анализе небольших данных.
Входные данные могут привести к тому, что общая функция, используемая для анализа заголовков HTTP и MIME, будет выделять значительно больше памяти, чем требуется для хранения проанализированных заголовков. Злоумышленник может использовать это поведение, чтобы заставить HTTP-сервер выделять большие объемы памяти из небольшого запроса, что может привести к нехватке памяти и отказу в обслуживании.
net/http, net/textproto, mime/multipart: Анализ много компонентной формы может потреблять большое количество ресурсов ЦП и памяти при обработке входных данных формы, содержащих очень большое количество частей. Это связано с несколькими причинами:
mime/multipart.Reader.ReadForm ограничивает общую память, которую может потреблять проанализированная составная форма. ReadForm может занижать объем потребляемой памяти, что приводит к принятию большего количества входных данных, чем предполагалось.
Ограничение общей памяти не учитывает повышенную нагрузку на сборщик мусора из-за большого количества небольших выделений памяти в формах, состоящих из многих частей.
ReadForm может выделять большое количество недолговечных буферов, что еще больше увеличивает нагрузку на сборщик мусора.
Сочетание этих факторов может позволить злоумышленнику заставить программу, анализирующую составные формы, потреблять большое количество ресурсов ЦП и памяти, что может привести к отказу в обслуживании. Это затрагивает программы, использующие mime/multipart.Reader.ReadForm, а также синтаксический анализ форм в пакете net/http с методами запроса FormFile, FormValue, ParseMultipartForm и PostFormValue.
Предложение log/slog: structured, leveled logging принято.
Awesome
https://awesome-go.com/
https://github.com/guardrailsio/awesome-golang-security
https://github.com/Binject/awesome-go-security
https://gist.github.com/hbt/d6ab942b882d5b94f331c5257076d05e
https://github.com/avelino/awesome-go
Материалы для обучения
Уроки для изучения Golang
Gopherlings - изучайте Go, исправляя неправильные программы
Алгоритмы, реализованные в Go (для обучения)
LearnGo: большая коллекция примеров, упражнений
Статьи
Зачем откладывать разблокировку мьютексов
Импорт из форм Google в вашу CRM с помощью OpenFaaS
От Go on EC2 до Fly.io: больше удовольствия, меньше затрат?
Причуды и хитрости golang, часть 2
Руководство для начинающих по созданию веб-приложения с помощью Ent
Покрытие кода для интеграционных тестов Go
Визуализация образцов ЦП из трассировок выполнения Go
Полное руководство по slog
Единственный, обязательный, вечный макет проекта Go
Примеры параллелизма Golang в реальном мире
Обратный прокси-сервер с динамическим выбором бэкенда
Мощь интерфейсов с одним методом в Go
a[low:high:max] трюк с slice
Паттерн синхронизации в Go
Планировщик Go
SwissMap: меньшая и более быстрая хэш-таблица Golang
Паттерн адаптера в Go
Алгебра анонимных сетей
Go в SAMP
Практические советы по устранению утечек памяти в Go
Переходим на Go: 16 материалов для самостоятельного изучения языка
Трассировка сервисов через очередь сообщений. OpenTelemetry, NATS
5 паттернов параллельного программирования в GO, которые сделают ваш следующий проект лучше
Как мы сделали для разработчиков универсальную шину событий, не требующую знаний Kafka и прочих брокеров
Что не так с твоим покрытием тестов в Go?
Архитектура Hashicorp Vault
Эволюция алгоритма фильтрации модификаций товаров в Авито
Bazel, stamping, remote cache
Сказ о том как pet-project превратился в небольшой пассивный доход (часть 2)
Мой путь в профессию: из аналитиков в Go-разработчики
Выбираем IAM в 2023 или, что есть кроме Keycloak
Assembler в Go: техники ускорения и оптимизации
Шаблон backend сервера на Golang — часть 5 — оптимизация Worker pool
Тайные каналы связи или как централизованные сервисы способны разлагаться изнутри
Как я приложение с Go на Rust переписывал
Инструменты
vald 1.7.4 - Распределенная векторная поисковая система.
imagor 1.4.3 — сервер обработки изображений с поддержкой Docker.
ebitengine 2.5.1 — игровой движок с открытым исходным кодом 2D-игр.
mirrord 3.34.0 — инструмент для запуска локальной службы в облачном (Kubernetes) контексте.
zitadel 2.23.1 — система управления пользователями, которая быстро настраивается, мультитенантность с настройкой фирменного стиля, безопасный вход в систему, самообслуживание, OpenID Connect, OAuth2.x, SAML2, беспарольный доступ с FIDO2 (включая пароли), OTP, U2F и неограниченный контрольный журнал.
phoneinfoga 2.10.4 — инструмент для сканирования международных телефонных номеров. Это позволяет вам сначала собрать базовую информацию, такую как страна, регион, оператор связи и тип линии, а затем использовать различные методы, чтобы попытаться найти провайдера VoIP или идентифицировать владельца.
Yaegi 0.15.1 — интерпретатор Go.
ZincSearch 0.4.3 — Альтернатива Elasticsearch на платформе Go.
q 0.11.1 — DNS-клиент командной строки с поддержкой UDP, TCP, DoT, DoH, DoQ и ODoH.
HoverFly 1.5.2 — Легкий инструмент моделирования API.
task 3.22.0 — это средство запуска/сборки задач
algnhsa 1.0.0 — серверный адаптер AWS Lambda Go net/http, позволяет запускать веб-приложения Go на AWS Lambda и API Gateway или ALB без изменения существующих обработчиков
pngr — стартовый комплект Dockerized (postgres + nginx + golang + react)
macaron 1.5.0 — модульный веб-фреймворк на Go.
chi 5.0.8 — маршрутизатор для создания сервисов Go HTTP
chromedp 0.9.0 — управление браузерами через протокол Chrome DevTools.
ko 0.13.0 — контейнер образов контейнеров для приложений Go.
v8go 0.9.0 — выполнение JavaScript из Go
gotraceui 0.1.0 — приложение с графическим интерфейсом для просмотра трассировок выполнения Go
pathfind — поиск пути на 2D-полигональных картах, находит кратчайший путь между двумя точками в наборе полигонов путем построения графа видимости и последующего использования для него алгоритма поиска A*.
betteralign 0.2.4 — это инструмент для обнаружения структур, которые использовали бы меньше памяти, если бы их поля были отсортированы, и, при необходимости, сортировки таких полей.