Бестиарий программирования
991 subscribers
284 photos
4 videos
4 files
351 links
Наблюдения за жизнью ошибок в коде.
Андрей Карпов.

ГОСТ Р 71207-2024, ГОСТ Р 56939-2024, РБПО, Статический анализ кода
Download Telegram
Go разработчики постоянно сталкиваются с предупреждениями встроенного статического анализатора. А что делать, если его возможностей не хватает или нужно искать что-то специфичное для вашего проекта? Go предоставляет мощные инструменты для разбора и анализа кода. В этой статье мы поговорим о них и даже сделаем своё первое диагностическое правило.

Кстати говоря, я думаю вы уже поняли, что мы разрабатываем свой статический анализатор для Go. Если вы хотите поучаствовать в EAP, то следите за нашими новостями.
This media is not supported in your browser
VIEW IN TELEGRAM
Какой ты единорог в 2026? 🦄

Кстати, не забывайте забрать подарок от нас ❤️

#видео #новыйгод
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣51
Про статический анализатор конфигов Nginx от Яндекс (https://github.com/yandex/gixy) я пару раз упоминал у себя на канале, но уже давненько

2019
https://xn--r1a.website/tech_b0lt_Genona/890

2021
https://xn--r1a.website/tech_b0lt_Genona/2529

Это хороший инструмент, но он несколько лет уже не развивается.

Есть форк, который развивается и поддерживается
https://github.com/dvershinin/gixy
https://pypi.org/project/gixy-ng/

Но есть ещё один форк
https://github.com/MegaManSec/Gixy-Next

И мотивация его появления интересна

> After some time, the maintainer of gixy-ng began to commit AI-generated changes to the codebase which introduced obvious regressions, broke critical behavior of the tool (which anybody using the tool would have picked up), added random AI-tooling artifacts, and introduced code which simply did not do what it was supposed to do. Most importantly, the maintainer also added marketing for their business to all documentation, all output, and all source code of gixy-ng.

Вот два поста в блоге автора Gixy-Next по этому поводу

Gixy-Next: an overview of a Gixy fork with updated, improved, and new checks
https://joshua.hu/gixy-ng-new-version-gixy-updated-checks

From gixy-ng to Gixy-Next: rescuing Gixy from AI slop
https://joshua.hu/gixy-ng-ai-slop-gixy-next-maintained

Gixy-Next поддерживает следующие проверки

- [add_header_content_type] Setting Content-Type via add_header
- [add_header_multiline] Multiline response headers
- [add_header_redefinition] Redefining of response headers by "add_header" directive
- [alias_traversal] Path traversal via misconfigured alias
- [allow_without_deny] Allow specified without deny
- [default_server_flag] Missing default_server flag
- [error_log_off] error_log set to off
- [hash_without_default] Missing default in hash blocks
- [host_spoofing] Request's Host header forgery
- [http_splitting] HTTP Response Splitting
- [if_is_evil] If is evil when used in location context
- [invalid_regex] Invalid regex capture groups
- [low_keepalive_requests] Low keepalive_requests
- [merge_slashes_on] Enabling merge_slashes
- [missing_worker_processes] Missing worker_processes
- [origins] Problems with referer/origin header validation
- [proxy_buffering_off] Disabling proxy_buffering
- [proxy_pass_normalized] proxy_pass path normalization issues
- [regex_redos] Regular expression denial of service (ReDoS)
- [resolver_external] Using external DNS nameservers
- [return_bypasses_allow_deny] Return directive bypasses allow/deny restrictions
- [ssrf] Server Side Request Forgery
- [stale_dns_cache] Outdated/stale cached DNS records used in proxy_pass
- [try_files_is_evil_too] try_files directive is evil without open_file_cache
- [unanchored_regex] Unanchored regular expressions
- [valid_referers] none in valid_referers
- [version_disclosure] Using insecure values for server_tokens
- [worker_rlimit_nofile_vs_connections] worker_rlimit_nofile must be at least twice worker_connections


Как и много лет назад я рекомендую к использованию такие инструменты.
👍1🤨1
Узнал из поста в TG канале Swordfish Security.

В самом конце 2025 года информационным письмом №ИН-017-56/118 Банк России опубликовал обновленный методический документ "Профиль защиты прикладного программного обеспечения автоматизированных систем и приложений кредитных организаций и некредитных финансовых организаций".

Кто о чём, а мне больше всего интересны отсылки к РБПО, статическому анализу кода и соответствующим стандартам. Пересечение большое.

Во-первых, описываемый процесс разработки безопасного ПО адаптирован под ГОСТ 56939-2024.
Документ обновлен, в том числе с учётом практики применения "ГОСТ Р 56939-2024. Национальный стандарт Российской Федерации. Защита информации. Разработка безопасного программного обеспечения. Общие требования".

Во-вторых, прописано необходимость использования статических анализаторов кода, что логично, т.к. это 10-й процесс ГОСТ 56939-2024. При этом, хотя я не нашёл в документе упоминание ГОСТ Р 71207-2024 "Статический анализ программного обеспечения", он оказал влияние и видны заимствования оттуда.

Например, говорится, что инструменты статического анализа должны реализовывать следующие методы анализа:
- внутрипроцедурный анализ потоков данных и управления;
- межпроцедурный и межмодульный контекстно-чувствительный анализ потока данных;
- чувствительный к путям выполнения анализ потоков данных и управления;
- межпроцедурный и межмодульный контекстно-чувствительный анализ помеченных данных;
- анализ программы на синтаксическом уровне.

Это ровно то, что перечисляется в разделе 7.4. ГОСТ Р 71207-2024. Можно только отметить, что про "межпроцедурный и межмодульный контекстно-чувствительный анализ помеченных данных" сказано и другими словами:
Статический анализ кода проводится с использованием автоматизированных средств и направлен на идентификацию потенциально опасных фрагментов кода, в том числе: а) вызовов функциональных объектов (функций, методов, процедур) с передачей им в качестве аргументов данных, вводимых пользователем или принимаемых из внешних источников;

В общем, ГОСТ Р 56939-2024 и ГОСТ Р 71207-2024 будут всё активнее влиять на подходы к разработке ПО. Уместно, ещё вспомнить и приказ ФСТЭК №117.

P.S. Хотите организовывать статический анализ по ГОСТ – используйте PVS-Studio :)
👍3🔥2👨‍💻1👀1
Мы иногда во внутреннем чате обмениваемся фрагментами кода с неочевидными ошибками, которые обнаруживаются с помощью PVS-Studio в каком-нибудь открытом проекте. Мол, кто быстро сообразит, что не так с кодом?

Вчера коллега поделился вот таким фрагментом кода из проекта SereneDB:
template <typename T>
struct NumericParameter : public Parameter {
using ValueType = T;
....
std::string name() const override {
if constexpr (std::is_same_v<ValueType, int16_t>) {
return "int16";
} else if constexpr (std::is_same_v<ValueType, uint16_t>) {
return "uint16";
} else if constexpr (std::is_same_v<ValueType, int32_t>) {
return "int32";
} else if constexpr (std::is_same_v<ValueType, uint32_t>) {
return "uint32";
} else if constexpr (std::is_same_v<ValueType, int64_t>) {
return "int64";
} else if constexpr (std::is_same_v<ValueType, uint64_t>) {
return "uint64";
} else if constexpr (std::is_same_v<ValueType, size_t>) {
return "size";
} else if constexpr (std::is_same_v<ValueType, double>) {
return "double";
} else {
static_assert("unsupported ValueType");
}
}
....
};

Признаюсь честно, я два раза прочитал этот фрагмент, но так и не увидел ошибку. И засчитал себе поражение. Раз так, думаю, это достойно публикации в канал, чтобы и вы могли испытать свою внимательность :)

Ответ:

Анализатор PVS-Studio выдаёт предупреждение V591 Non-void function should return a value. parameters.h 222

На первый взгляд предупреждение странное и смахивает на ложное срабатывание, ведь не может быть, что функция закончила работу, не вернув значение с помощью оператора
return. Если выбирается ветка else, то там static_assert, и код просто не должен скомпилироваться. Во всех остальных случаях есть return "что-то";.

Но есть нюанс!

Ещё раз посмотрите на эту строчку:
static_assert("unsupported ValueType");


static_assert используется неправильно: пропущен bool-constexpr. Вернее, строковый литерал неявно конвертируется в значение true, и static_assert никогда не прервёт компиляцию. В итоге else-ветка функции ничего не возвращает, и её поведение будет не определено для всех специализаций NumericParameter, кроме указанных ранее в цепочке if constexpr.

Правильный вариант:
static_assert(false, "unsupported ValueType");
🔥261
P.S. Анализатор PVS-Studio внимательнее не только меня, но и LLM (см. комментарий на habr)
😁42🤣1
Продолжаем цикл вебинаров по РБПО. Хотя скорее уже заканчиваем, так как осталось рассмотреть два процесса. Дополнительно будет пара бонусных вебинаров, но всё равно марафон подходит к завершению.

Сегодня 21.01 в 16:00 ждём вас на "Процесс 24. Поиск уязвимостей в программном обеспечении при эксплуатации". Смотреть записи прошедших вебинаров и участвовать в новых.

P.S. Скоро возобновляем встречи клуба С++ программистов в Москве "Сплошные плюсы". Приглашаем докладчиков. Контакт для тех кто хочет что-то рассказать на тему C++: Волкова Дарья - Telegram: @daryavolkovaa
🔥7👍3
Обновлённое подробное описание PVS-Studio на начало 2026 года с точки зрения
• ГОСТ Р 71207—2024 — Статический анализ программного обеспечения,
• ГОСТ Р 56939—2024 — РБПО,
• приказа ФСТЭК №117,
• и т.д.

P.S. Команда PVS-Studio будет со стендом на ТБ Форум 2026 (18—20 февраля 2026, МВЦ "Крокус Экспо", павильон 2, зал 10). Я там тоже буду. Приходите задавать вопросы на тему публикации, стандартов и вообще.
🔥7
Бестиарий программирования pinned «Обновлённое подробное описание PVS-Studio на начало 2026 года с точки зрения • ГОСТ Р 71207—2024 — Статический анализ программного обеспечения, • ГОСТ Р 56939—2024 — РБПО, • приказа ФСТЭК №117, • и т.д. P.S. Команда PVS-Studio будет со стендом на ТБ Форум…»
Буду рад присланным идеям диагностических правил статического анализатора для языков Go, JavaScript, TypeScript. Такие ошибки, как деления на 0, не интересны. С ними и так всё понятно. Интересны разновидности опечаток (в духе забытого throw), паттерны неправильного использования функций и т.п. Заранее спасибо.
Даже немного не верится, но мы добрались до двух последних процессов ГОСТ Р 56939-2024!

Записи вебинаров:

Вебинар 24. Поиск уязвимостей в программном обеспечении при эксплуатации

Вебинар 25. Обеспечение безопасности при выводе программного обеспечения из эксплуатации

Другие записи можно найти на странице "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024".

Однако, нам сложно остановиться :) Поэтому вас ждёт ещё несколько дополнительных встреч. Уже запланировано:

• 04.02.2026 в 16:00 по МСК - Безопасность frontend-приложений: особенности, угрозы и анализаторы класса FAST (Frontend Application Security Testing)

• 11.02.2026 в 16:00 по МСК - PVS-Studio Atlas — новая платформа контроля качества кода
👍10