framework/skills/bsl-practices/security/SKILL.md
Безопасность 1С: секреты, криптография, аутентификация. Используй когда нужно спроектировать или проверить хранение паролей/токенов, ЭЦП, сертификаты, OpenID/OAuth, TLS, привилегированный режим, маскирование в логах.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework securityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Этот навык — карта тем по безопасности прикладного кода 1С. Конкретика по платформенным API вынесена в references/. Здесь — границы доверия, типовые ошибки и stop-rules, которые должен соблюдать любой агент (architect / developer-code / reviewer) при работе с чувствительными данными.
Безопасность в 1С — не отдельная подсистема, а сквозное свойство кода:
БезопасноеХранилище, а не в коде/конфигурации/логах.МенеджерКриптографии + явный провайдер (CryptoPro CSP / ViPNet) с явной версией ГОСТ.| Триггер | Действие |
|---------|----------|
| Видишь работу с паролем/токеном/секретом в параметре процедуры или в строке кода | Прочитай references/secrets.md, перенеси в БезопасноеХранилище, проверь маскирование в логах |
| Видишь работу с МенеджерКриптографии, СертификатКриптографии, ХранилищеСертификатовКриптографии, ПараметрамиПодписиCMS | Прочитай references/crypto.md, проверь провайдера, версию ГОСТ, контекст (клиент/сервер) и lifecycle закрытого ключа |
| Видишь HTTP-вызов внешнего API, OpenID/OAuth, basic-auth, клиентский TLS-сертификат | Прочитай references/auth.md, проверь error semantics и хранение учётных данных |
| Делаешь ревью кода, который трогает права, RLS, привилегированный режим или внешние интеграции | Используй references/review-checklist.md как обязательный фильтр перед финальным ответом |
| Нужно спроектировать новую интеграцию/сервис с аутентификацией | Сначала определи trust boundary (см. ниже), потом выбирай API |
Перед тем как писать или ревьюить код, явно определи, какую границу он пересекает:
HTTPСоединение, OpenID/OAuth, клиентский сертификат, TLS.МенеджерКриптографии, CryptoPro CSP / ViPNet, доступ к хранилищу сертификатов под учёткой rphost/srv1cv8.БезопасноеХранилище, либо внешний vault через коннектор.Если граница не названа — навык применён неверно: вернись к этапу проектирования.
БезопасноеХранилище → references/secrets.mdБезопасноеХранилище.УстановитьДанные(Владелец, Данные[, Ключ]) и ПрочитатьДанные(Владелец[, Ключ]).УстановитьПривилегированныйРежим(Истина) точечно (не на весь модуль).references/crypto.mdМенеджерКриптографии(ИмяПровайдера, ТипПровайдера) — провайдер выбирается явно (CryptoPro CSP, ViPNet CSP).СертификатКриптографии, ХранилищеСертификатовКриптографии, ПараметрыПодписиCMS.Хранилище.Значение.ЭлектроннаяПодпись, ЭлектроннаяПодписьСлужебный) — предпочтительный путь, если БСП в конфигурации есть.references/auth.mdHTTPСоединение/HTTPЗапрос, токен и refresh-token хранятся в БезопасноеХранилище.БезопасноеХранилище, заголовок собирается на сервере.СертификатКлиентаФайл, СертификатКлиентаWindows, СертификатКлиентаOpenSSL в HTTPСоединение.missing credentials, expired token, invalid certificate, provider unavailable, denied rights, tenant mismatch, remote auth failure.references/review-checklist.mdСтек-нейтральный чеклист, который агент-reviewer проходит обязательно перед финальным ответом, если код трогает любую из тем выше.
Эти правила — жёсткие. Нарушение = блокирующий комментарий ревью и переписывание кода.
Пароль/токен/приватный ключ нельзя передавать через параметр процедуры, у которой есть граница «клиент ↔ сервер»
Пароль.Приватный ключ / контейнер криптографии не хранится в общем модуле, реквизите справочника или константе
Константа.КлючШифрования, в макете.МенеджерКриптографии.УстановитьПривилегированныйРежим(Истина) вокруг работы с БезопасноеХранилище — обязателен и точечен
УстановитьПривилегированныйРежим БезопасноеХранилище.ПрочитатьДанные упадёт по правам у обычного пользователя.УстановитьПривилегированныйРежим(Ложь) обязательно ставится сразу после чтения, в том же блоке Попытка/Исключение.Логи и журнал регистрации не содержат токены, пароли, приватные ключи и полные заголовки Authorization
ЗаписьЖурналаРегистрации, Сообщить, ответе агента — только маскированные значения (***, последние 4 символа, fingerprint сертификата).Аутентификационная ошибка отличается от валидационной и бизнес-ошибки
401/403 от внешнего API не превращается в «не удалось выполнить операцию». Это отдельный тип ошибки с отдельной обработкой (refresh, повторный логин, эскалация).Контекст: Нужно вызвать внешний REST API с OAuth 2.0 (client credentials).
Шаги:
client_secret и refresh_token — в БезопасноеХранилище, владелец = ссылка элемента справочника.УстановитьПривилегированныйРежим.Authorization — на сервере, заголовок не возвращается на клиент.expired token → refresh, invalid client → ошибка конфигурации (не retry), provider unavailable → retry с backoff.client_id — открыто, client_secret/access_token — маскировано (4 последних символа).references/review-checklist.md.Контекст: Нужно подписать XML/PDF квалифицированной ЭЦП по ГОСТ Р 34.10-2012.
Шаги:
МенеджерКриптографии руками.МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", 80) с явным ТипПровайдера.Отпечаток), не по «первому подходящему».ПараметрыПодписиCMS (открепленная/прикреплённая, кодировка).ДанныеПодписи целиком; логировать Отпечаток сертификата и идентификатор бизнес-объекта.Контекст: В PR появился УстановитьПривилегированныйРежим(Истина).
Шаги:
УстановитьПривилегированныйРежим(Ложь) в той же области видимости и в Попытка/Исключение.references/review-checklist.md.// Сервер. Чтение токена внешнего API из безопасного хранилища.
// Привилегированный режим — точечный, только вокруг чтения секрета.
Функция ПолучитьТокенДоступа(УчётнаяЗапись) Экспорт
УстановитьПривилегированныйРежим(Истина);
Попытка
ДанныеСекрета = БезопасноеХранилище.ПрочитатьДанные(УчётнаяЗапись, "access_token");
Исключение
УстановитьПривилегированныйРежим(Ложь);
ВызватьИсключение;
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
Если ДанныеСекрета = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Токен не настроен для учётной записи.'");
КонецЕсли;
Возврат ДанныеСекрета;
КонецФункции
// АНТИПАТТЕРН: пароль пересекает границу клиент/сервер в открытом параметре.
// АНТИПАТТЕРН: пароль попадает в журнал регистрации.
&НаСервереБезКонтекста
Функция ОтправитьДокумент(URL, Логин, Пароль, ТелоЗапроса) Экспорт
ЗаписьЖурналаРегистрации("Интеграция",
УровеньЖурналаРегистрации.Информация,
,
,
"Отправка: URL=" + URL + ", Логин=" + Логин + ", Пароль=" + Пароль);
// ... вызов внешнего API ...
КонецФункции
| Ошибка | Последствие | Как избежать |
|--------|-------------|--------------|
| Пароль/токен в параметре экспортной серверной процедуры | Утечка по сети, в дампах, в логах клиента | Передавать только владельца секрета (ссылку), читать секрет на сервере |
| УстановитьПривилегированныйРежим(Истина) на весь модуль/функцию | Обход RLS и проверок ролей по всей бизнес-логике | Точечный блок только вокруг работы с БезопасноеХранилище |
| Хранение access_token в реквизите справочника / константе / макете | Любой пользователь с правом чтения справочника получает токен | БезопасноеХранилище + владелец = ссылка элемента справочника |
| МенеджерКриптографии() без явного провайдера и типа | Код работает на стенде, падает на проде с другим провайдером | Явные ИмяПровайдера + ТипПровайдера, версия ГОСТ зафиксирована |
| Сертификат выбирается «первый из хранилища» | Подпись неверным сертификатом в момент ротации | Поиск строго по Отпечатку |
| 401 от внешнего API → Сообщить("Ошибка при сохранении") | Невозможно отличить истёкший токен от ошибки данных | Отдельный тип ошибки аутентификации + обработка refresh |
| Логирование всего тела HTTP-запроса/ответа | В журнале регистрации лежат пароли/токены/ПДн | Санитизация перед логированием, маскирование чувствительных полей |
error-handling — общая модель ошибок, в т.ч. различение технических и бизнес-ошибок.integration-patterns — паттерны HTTP-сервисов и внешних интеграций, на которые навешивается аутентификация.ssl-patterns — модули БСП (в т.ч. «Электронная подпись», «ИнтернетПользователи»).coding-standards — общие правила оформления серверного кода.tools
Diagnostics for Vanessa Automation runs. Use when a feature scenario failed, artifacts were not created, or you need to classify a failure after launch.
tools
Creating and refining Vanessa Automation feature scenarios based on real project requirements. Use when you need to write or update a scenario test, not just run it.
tools
--- name: v8-session-manager description: Use when working with the 1С session manager (v8-session-manager) - launch, configuration, connecting 1С clients, reading session_list, calling proxied MCP-tools from 1С extensions, diagnostics. Triggers: mention of `v8-session-manager`, `session_list`, 1С extension MCP showcase, error “no active sessions” / “session_id required”, connecting a client to the manager via `mcpMode=ws`. provides_capabilities: # Built-in manager tools — always available whi
tools
Use when Codex needs to manage v8-runner on local 1C projects through the CLI: configure v8project.yaml, initialize infobases or EDT workspaces, build sources from Designer or EDT, run syntax checks and tests, dump infobase changes, convert source formats, load or export artifacts, launch 1C clients, or choose safe 1C automation command sequences.