Автоматизированная проверка соответствия стандартам кодирования, требованиям безопасности, лицензионным обязательствам и нормативам конфиденциальности.
Обзор¶
Обработчик соответствия выполняет многофазную проверку с использованием трёх специализированных агентов. Обработчик доменно-агностичен — все специфичные для языка шаблоны (соглашения об именовании, устаревшие функции, шаблоны работы с памятью/блокировками) загружаются динамически из активного доменного плагина через DomainRegistry.
Фазы проверки:
- Соответствие лицензиям (
LicenseDetector) — отсутствующие заголовки, конфликты GPL, несовместимые комбинации лицензий - Соответствие конфиденциальности (
ComplianceValidator) — ПДн без шифрования, отсутствие политики хранения, логирование конфиденциальных данных, проверка согласия - Соответствие безопасности (
ComplianceValidator) — захардкоженные учётные данные, запрещённая криптография (MD5/SHA1/DES), недостаточная случайность, отсутствие валидации входных данных - Стандарты кодирования (
StandardsChecker) — покрытие документацией, соглашения об именовании, цикломатическая сложность (>20), магические числа - Граф-анализ (
CallGraphAnalyzer) — радиус поражения нарушений, оценка риска исправлений, оценка воздействия
Форматы вывода: JSON (структурированный отчёт в состоянии) и Markdown (локализованный EN/RU через ComplianceReportFormatter).
Быстрый старт¶
# Выберите сценарий соответствия через CLI или MCP
/select 08
CLI¶
# Проверка соответствия через команду standards
python -m src.cli.import_commands standards report --format md --output compliance.md
# Проверка соответствия через аудит
python -m src.cli audit --db data/projects/myproject.duckdb --language ru
# Квалификационные испытания по ГОСТ Р 71207-2024
python -m src.cli qualification run --suite juliet --juliet-path /path/to/juliet \
--languages c --cwe CWE-476,CWE-190,CWE-191 --gocpg-path gocpg/gocpg.exe
MCP (ИИ-ассистент)¶
codegraph_compliance(query="Проверить соответствие стандартам", db_path="data/projects/myproject.duckdb")
Квалификационные испытания ГОСТ Р 71207-2024¶
CodeGraph закрывает Phase 6 certification-ready workflow для ГОСТ Р 71207-2024:
qualification run --suite julietзапускает реальный GoCPG-анализ на официальных Juliet suites- qualification report считает FP/FN по ГОСТ-формулам
- поддерживаются analysis profiles, analysis scopes и function-scoped matching
Фактические результаты на официальных Juliet subset _01 по покрытым CWE CWE-476/CWE-190/CWE-191:
| Язык | Выборка | FP rate | FN rate | Статус |
|---|---|---|---|---|
C |
24 | 33.33% | 0.00% | PASS |
C++ |
4 | 0.00% | 0.00% | PASS |
Java |
853 | 1.86% | 26.17% | PASS |
C# |
685 | 16.09% | 15.12% | PASS |
По subtype:
C:integer_overflowFP0.00%, FN0.00%;null_derefFP50.00%, FN0.00%C++:null_derefFP0.00%, FN0.00%Java:integer_overflowFP0.65%, FN26.57%;null_derefFP25.00%, FN14.29%C#:integer_overflowFP16.67%, FN15.15%;null_derefFP0.00%, FN14.29%
Соответствие стандартам кодирования¶
Нарушения стиля¶
> Проверка на наличие нарушений стандартов кодирования
╭─────────────── Соответствие стилю ───────────────────────────╮
│ │
│ Найдено нарушений: 47 │
│ │
│ По категориям: │
│ Соглашения об именовании: 18 │
│ Отступы: 12 │
│ Стиль комментариев: 9 │
│ Длина функций: 8 │
│ │
│ Примеры нарушений: │
│ │
│ 🟡 src/server/utils/cache.c:234 │
│ Переменная 'TempVar' должна использовать snake_case │
│ │
│ 🟡 src/server/executor/hash_join.c:567 │
│ Функция превышает ограничение в 500 строк (612 строк) │
│ │
╰───────────────────────────────────────────────────────────────╯
Пороговые значения из конфигурации:
- Длина функций: loc_very_large = 500 строк
- Цикломатическая сложность: high_complexity = 20
- Радиус поражения (высокий риск): blast_radius_high = 20 затронутых методов
Совместимость API¶
> Проверка использования устаревших API
╭─────────────── Соответствие API ─────────────────────────────╮
│ │
│ Использование устаревших API: │
│ │
│ 🔴 strcpy() — используйте strlcpy/strncpy │
│ Вхождений: 23 │
│ Радиус поражения: ВЫСОКИЙ (45 транзитивных вызовов) │
│ │
│ 🔴 sprintf() — используйте snprintf │
│ Вхождений: 45 │
│ Радиус поражения: ВЫСОКИЙ (78 транзитивных вызовов) │
│ │
│ 🟡 gets() — используйте fgets │
│ Вхождений: 2 │
│ Радиус поражения: НИЗКИЙ (3 вызова) │
│ │
│ Рекомендация: используйте безопасные функции для строк │
│ │
╰───────────────────────────────────────────────────────────────╯
Устаревшие функции загружаются из доменного плагина через DomainRegistry.get_deprecated_functions().
Соответствие требованиям безопасности¶
Сопоставление с CWE¶
> Сопоставление результатов с идентификаторами CWE
╭─────────────── Сопоставление с CWE ──────────────────────────╮
│ │
│ Результаты по Common Weakness Enumeration (CWE): │
│ │
│ CWE-798 (Захардкоженные учётные данные): 2 вхождения │
│ КРИТИЧНО — секреты в исходном коде │
│ │
│ CWE-89 (SQL-инъекции): 3 вхождения │
│ Отсутствие параметризованных запросов │
│ │
│ CWE-120 (Переполнение буфера): 5 вхождений │
│ Строковые операции без ограничения размера │
│ │
│ CWE-338 (Недостаточная случайность): 1 вхождение │
│ Некриптографический ГПСЧ для безопасности │
│ │
│ CWE-476 (Разыменование NULL): 12 вхождений │
│ Отсутствие проверок NULL после выделения памяти │
│ │
╰───────────────────────────────────────────────────────────────╯
Категории OWASP¶
Обработчик проверяет типовые шаблоны уязвимостей, сопоставленные с категориями OWASP:
| Категория | Что проверяется |
|---|---|
| Инъекции (A03) | SQL-инъекции, инъекции команд, форматные строки |
| Нарушения аутентификации | Захардкоженные учётные данные, слабая обработка паролей |
| Раскрытие конфиденциальных данных | ПДн без шифрования, логирование чувствительных данных |
| Нарушение контроля доступа | Отсутствие проверок авторизации |
| Ошибки конфигурации безопасности | Запрещённые алгоритмы (MD5, SHA1, DES по NIST) |
| Недостаточное логирование | Отсутствие аудиторского следа для событий безопасности |
Соответствие лицензиям¶
> Проверка соответствия лицензиям
╭─────────────── Соответствие лицензиям ──────────────────────╮
│ │
│ Анализ лицензий: │
│ │
│ 🔴 КРИТИЧНО: Конфликт GPL в проприетарном модуле │
│ src/server/contrib/extension.c — заголовок GPL-3.0 │
│ Лицензия проекта: MIT — несовместимо │
│ │
│ 🟡 ПРЕДУПРЕЖДЕНИЕ: Отсутствующие заголовки лицензий │
│ 12 файлов без идентификаторов SPDX │
│ │
│ ✅ ПРОЙДЕНО: Несовместимых комбинаций лицензий нет │
│ │
╰──────────────────────────────────────────────────────────────╯
Соответствие конфиденциальности¶
> Проверка соответствия нормативам конфиденциальности
╭─────────────── Соответствие конфиденциальности ─────────────╮
│ │
│ Анализ конфиденциальности: │
│ │
│ 🔴 КРИТИЧНО: ПДн хранятся без шифрования │
│ Поля персональных данных без шифрования (GDPR ст. 32) │
│ │
│ 🔴 КРИТИЧНО: Логирование конфиденциальных данных │
│ Пароли/номера документов/данные карт в логах │
│ │
│ 🟡 ВЫСОКИЙ: Отсутствие политики хранения данных │
│ Нет TTL/очистки для персональных данных (GDPR ст. 5) │
│ │
│ 🟡 ВЫСОКИЙ: Отсутствие проверки согласия │
│ Нет проверки согласия перед обработкой данных │
│ (GDPR ст. 7) │
│ │
╰──────────────────────────────────────────────────────────────╯
Соответствие документированию¶
Покрытие комментариями¶
> Проверка покрытия документацией
╭─────────────── Соответствие документированию ────────────────╮
│ │
│ Анализ покрытия комментариями: │
│ │
│ Общее покрытие: 67% │
│ │
│ По модулям: │
│ core/: 78% ✅ │
│ parser/: 72% ✅ │
│ optimizer/: 65% 🟡 │
│ storage/: 54% 🔴 │
│ utils/: 48% 🔴 │
│ │
│ Отсутствующая документация: │
│ - 23 публичные функции без комментариев │
│ - 8 сложных функций без пояснения алгоритма │
│ │
╰───────────────────────────────────────────────────────────────╯
Примеры запросов¶
- «Проверить нарушения стандартов кодирования»
- «Найти использование устаревших API»
- «Сопоставить результаты с идентификаторами CWE»
- «Проверить соответствие лицензиям»
- «Проверить соответствие нормативам конфиденциальности»
- «Проверить покрытие документацией»
- «Какие функции содержат захардкоженные учётные данные?»
Связанные сценарии¶
- Аудит безопасности — Глубокий анализ безопасности
- Рецензирование кода — Проверка соответствия
- Технический долг — Оценка технического долга