Сценарий 08: Проверка соответствия

Автоматизированная проверка соответствия стандартам кодирования, требованиям безопасности, лицензионным обязательствам и нормативам конфиденциальности.

Обзор

Обработчик соответствия выполняет многофазную проверку с использованием трёх специализированных агентов. Обработчик доменно-агностичен — все специфичные для языка шаблоны (соглашения об именовании, устаревшие функции, шаблоны работы с памятью/блокировками) загружаются динамически из активного доменного плагина через DomainRegistry.

Фазы проверки:

  1. Соответствие лицензиям (LicenseDetector) — отсутствующие заголовки, конфликты GPL, несовместимые комбинации лицензий
  2. Соответствие конфиденциальности (ComplianceValidator) — ПДн без шифрования, отсутствие политики хранения, логирование конфиденциальных данных, проверка согласия
  3. Соответствие безопасности (ComplianceValidator) — захардкоженные учётные данные, запрещённая криптография (MD5/SHA1/DES), недостаточная случайность, отсутствие валидации входных данных
  4. Стандарты кодирования (StandardsChecker) — покрытие документацией, соглашения об именовании, цикломатическая сложность (>20), магические числа
  5. Граф-анализ (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_overflow FP 0.00%, FN 0.00%; null_deref FP 50.00%, FN 0.00%
  • C++: null_deref FP 0.00%, FN 0.00%
  • Java: integer_overflow FP 0.65%, FN 26.57%; null_deref FP 25.00%, FN 14.29%
  • C#: integer_overflow FP 16.67%, FN 15.15%; null_deref FP 0.00%, FN 14.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»
  • «Проверить соответствие лицензиям»
  • «Проверить соответствие нормативам конфиденциальности»
  • «Проверить покрытие документацией»
  • «Какие функции содержат захардкоженные учётные данные?»

Связанные сценарии