Skip to content

Latest commit

 

History

History
53 lines (44 loc) · 3.66 KB

File metadata and controls

53 lines (44 loc) · 3.66 KB

Маскирование чувствительных данных перед LLM

Назначение

Перед передачей исходного кода в LLM удаляются персональные данные, пароли и любые другие чувствительные данные, которые могут быть указаны в строковых литералах. Это снижает риск утечек и соответствует требованиям по защите тайны связи и персональных данных.

Что маскируется

  • Все строковые литералы в коде (между "), включая многострочные.
  • Содержимое строк полностью заменяется на <REDACTED>.
  • Комментарии (// и /* ... */) заменяются на //<REDACTED_COMMENT> или /*<REDACTED_COMMENT>*/.
  • Строковые литералы в статических находках (snippets) также редактируются.

Важно: идентификаторы, имена переменных и структура кода сохраняются без изменений.

Стратегия

  • Полная редукция: любая строка → <REDACTED>.
  • Комментарии сохраняются только как маркер <REDACTED_COMMENT>.
  • Маскирование применяется ко всему содержимому файла, которое отправляется в LLM.

Где применяется

Маскирование выполняется перед формированием промптов:

  • Кодовые блоки (code stage).
  • Паттерны (pattern stage).
  • Запросы (query stage).

Отчёт о маскировании

Для каждого LLM-запроса создаётся артефакт-отчёт:

  • Формат: JSON
  • Имя файла: {run_id}_{stage}_llm_redaction_{index}.json
  • Тип артефакта: {stage}_llm_redaction.json

Содержимое отчёта

  • source_path: путь исходного файла
  • unit_name: имя единицы анализа
  • unit_id: идентификатор unit (если доступен)
  • redacted_literals: количество замаскированных строковых литералов
  • redacted_lines: номера строк, где применена маска
  • redactions_by_line: словарь {номер_строки: количество_масок}
  • redacted_comments: количество замаскированных комментариев
  • comment_lines: номера строк, где были комментарии
  • comments_by_line: словарь {номер_строки: количество_комментариев}
  • redacted_in_findings: количество редактирований в статических snippets (если применимо)

Ограничения

  • Маскирование выполняется только для строковых литералов.
  • В тексте кода вне строк (идентификаторы, имена модулей, метаданные) изменения не производятся.

Основные файлы

  • Логика маскирования: worker/app/services/redaction.py
  • Встраивание в LLM промпты: worker/app/services/llm_client.py
  • Передача отчёта: worker/app/models.py, worker/app/main.py
  • Сохранение артефакта: backend/app/services/artifacts.py