Простейший механизм «Дополнительных настроек» или почему хранить пароли, ключи API и другие параметры в коде — плохо?

23.06.25

Администрирование - Информационная безопасность

Представьте ситуацию: вы пишете обработку для отправки email-уведомлений клиентам. Чтобы подключиться к серверу почты, вам нужны: логин, пароль, SMTP-адрес. Что делает большинство программистов?

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Расширение "ДополнительныеНастройки"
.cfe 12,42Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Просто пишут:

Логин = "admin@example.com";
Пароль = "secret123";
SMTPАдрес = "smtp.example.com";

Звучит разумно?

На первый взгляд — да.

Но на самом деле — это как оставить ключ от квартиры на видном месте.

 

Что может пойти не так?

  1. Изменение одного параметра требует правки кода

Представь, что нужно сменить пароль от почты или адрес SMS-сервиса.

Что ты делаешь?

Входишь в конфигуратор → ищешь нужный модуль → меняешь строку → сохраняешь → перезаливаешь обработку.

Если таких мест несколько (а они есть!), то приходится:

  • искать по всем модулям,
  • бояться сломать что-то ещё,
  • тестировать после каждой замены.
  1. Такие параметры часто дублируются в разных местах

Вот типичная ситуация:

В одном модуле используется SMTPАдрес = "smtp.example.com";

Во втором — СерверПочты = "smtp.example.com";

В третьем — "mail.example.com"

Один и тот же параметр, но написан по-разному и в разных местах.

И если сервер меняется… начинается кошмар поддержки.

  1. Это опасно с точки зрения безопасности

Когда ты хранишь:

  • пароли,
  • токены API,
  • логины,

прямо в коде, ты рискуешь:

  • Утечкой данных : коллега, партнёр или даже бывший сотрудник получает доступ.
  • Юридическими последствиями : особенно если вы работаете с персональными данными или платёжными системами.

 

Пример из жизни

Ситуация:

Вы интегрируете 1С с SMS-сервисом. Пишете:

APIКлюч = "abc123xyz";

Проходит полгода. Ключ утек. Или просто истёк. Нужно поменять.

Что происходит?

Вы открываете конфигурацию.

Ищете все места, где встречается APIКлюч.

Меняете значение.

Тестируете каждую точку, чтобы ничего не сломалось.

А если этот ключ использовался:

  • в внешней обработке,
  • в расширении,

— тогда вы потратите часы, чтобы всё найти и исправить и протестировать.

 

А теперь представь, как можно было сделать правильно

Вместо этого:

APIКлюч = "abc123xyz";

Сделай так:

APIКлюч = Настройки.ЗначениеНастройки("КлючАПИ");

Где ЗначениеНастройки () берёт данные из таблицы с общими настройками, список которых можно расширять в пользовательском режиме:

Теперь, чтобы изменить ключ — достаточно обновить одну точку.

Никаких поисков, никакого редактирования кода.

 

Ещё примеры из реальной жизни

Ссылки на элементы справочников или документы

НужныйКонтрагент = Справочник.Контрагенты.НайтиПоКоду("001");
Молоко = Справочник.Номенклатура.НайтиПоНаименованию("Молоко");
ЭталонныйДокумент = Документ.РеализацияТоваров.НайтиПоНомеру("1001");

Хороший вариант:

НужныйКонтрагент = Настройки.ЗначениеНастройки("НужныйКонтрагент");
Молоко = Настройки.ЗначениеНастройки("Молоко");
ЭталонныйДокумент = Настройки.ЗначениеНастройки("ЭталонныйДокумент");

В видео ниже я создаю расширение, которое решает проблемы с хранением настроек в коде. Данный пример можно легко адаптировать под вашу конфигурацию.

Тестирование проводилось на релизах: 8.3.25.1501 (X32/x64), Управление торговлей, редакция 11 (11.5.12.167). Однако должно работать на любой конфигурации, возможно нужно будет исправить режим совместимости, в случае использования более старых версий конфигураций. 

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.12.167

Вступайте в нашу телеграмм-группу Инфостарт

Стандарты 1С Чистый код рефакторинг хранение настроек пароли

См. также

Информационная безопасность Чистка данных Системный администратор Разработчик Руководитель проекта 1С 8.3 1С:Бухгалтерия 3.0 Платные (руб)

Обезличивает копию рабочей базы 1С перед передачей наружу и возвращает настоящие данные обратно, когда база вернулась. Это обратимая псевдонимизация: соответствия «исходное - псевдоним» пишутся в отдельный зашифрованный датасет, который остаётся у владельца. Работает на любой конфигурации - обходит метаданные и находит персональные данные сам, без списка реквизитов под конкретную базу. Суммы, количества, даты и номера документов не трогает никогда, оборотно-сальдовая до и после совпадает до копейки. Проверено на трёх конфигурациях: 106 031 объект, 215 642 замены, ноль ошибок, возврат 100 процентов.

42700 руб.

18.08.2026    1488    3    0    

3

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    4162    12    0    

25

Информационная безопасность Нейросети Разработчик 1С 8.3 Бесплатно (free)

Скрипт, который написал Claude Code и каждый час запускал планировщик, ночью пометил на удаление тысячи документов перемещений в продуктивной базе 1С на 5 ТБ. Остатки уехали на миллиардные суммы, база стояла до обеда, около 500 заказов с маркетплейсов и сайта ушли в отмены. Как это произошло, где была ошибка в определении дублей и что я сделал, чтобы это не повторилось: агентам только чтение, алерты в Telegram на массовую запись, ревизия планировщиков.

06.10.2026    6173    nedomolkov.ivan    161    

48

Инструментарий разработчика Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    15518    1484    KHoroshulinAV    64    

95

Нейросети Рефакторинг и качество кода Разработчик Бесплатно (free)

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    30039    Ibrogim    84    

57

Нейросети Рефакторинг и качество кода Разработчик Бесплатно (free)

Некоторые задачи можно и нужно делегировать ИИ, а простые задачи можно отдавать бесплатным моделям. В статье коротко рассказываю про расширение roocode для vscode, инструмент openrouter и реальную задачу по рефакторингу кода.

02.02.2026    23125    Ibrogim    59    

54

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

Полный контроль над изменениями в 1С без нагрузки на вашу базу. Мгновенный доступ к истории изменений, удобное сравнение и откат данных в один клик. Простой отчет с визуальным отображением изменений Откат на любую версию объекта в два клика История изменения данных хранится во внешней базе

180000 руб.

05.09.2025    5932    2    1    

4

Рефакторинг и качество кода Разработчик Россия Бесплатно (free)

GRASP-паттерны в 1С: меньше хаоса, больше архитектуры.

28.08.2025    15777    lapinio    49    

62
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1146 23.06.25 16:49 Сейчас в теме
В БСП давно придумали РС "БезопасноеХранилищеДанных".
Но как по мне - оно тоже не такое уж безопасное, как звучит из названия.
Я б сделал шифрованное хранилище, а ключ шифрования, например, хранил бы в файле, доступ к которому есть только у той учётки, от которой выполняется 1с
2. markbraer 128 23.06.25 16:50 Сейчас в теме
(1) это будет в следующей статье))
3. SerVer1C 1146 23.06.25 17:17 Сейчас в теме
(2) вы решили из примитивного механизма сделать многосерийную "Санта-Барбару" ?
Alexwarsis; starik-2005; proonec; +3 – Ответить
4. starik-2005 3309 23.06.25 19:12 Сейчас в теме
(3)
вы решили
Не, это ты идею подкинул. Осторожнее надо быть )))
ixijixi; SerVer1C; +2 – Ответить
5. sanymust 57 24.06.25 01:10 Сейчас в теме
Как только у человека возникает мысль написать НайтиПоКоду(), я бы его к разработкам не допускал больше, это уровень школьника. Эти рекомендации больше к людям, кто никогда не учился на программиста.
6. Avatarzorro 82 24.06.25 03:28 Сейчас в теме
(5) в типовой УХ и ERP УХ функционал согласования реализован на НайтиПоНаименованию(). В целом для технических и статических (условно статических) вещей нормальная тема. Типо когда у тебя есть универсальный механизм согласования по объектам, но набор этих объектов и заранее неизвестен и зависит от конфигурации (типо УХ и объединенный вариант ERP УХ с разными наборами объектов), но он при этом постоянен (условный справочник либо есть, либо нет и на этом все и заполнение обеспечивается обработчиками обновления\начального заполнения), то тогда нормальных подход.

А вот по части искать номенклатуру или документ по наименованию или коду это из разряда дичи.

типо вот пример

Функция ПеревестиЗаявкуВСостояниеУтверждена(ОбъектСсылка, ТолькоЗаполненные = Ложь, ДокументПроцесса = Неопределено, ИдентификаторФормыДляВыводаПротокола = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
	// Инициализация.
	ДополнительныеПараметры = МодульУправленияПроцессамиУХ.ИнициализироватьДополнительныеПараметрыСогласования(ДополнительныеПараметры);
	ИдентификаторСообщенияРабочий = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, "ИдентификаторСообщения", "");
	ИдентификаторФормыДляВыводаПротокола = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры,
		"ИдентификаторФормыДляВыводаПротокола", Неопределено);
	
	Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ОбъектСсылка)) Тогда
		ТипОбъектаСогласования = Справочники.СправочникиБД.НайтиПоНаименованию(ОбъектСсылка.Метаданные().Имя,,,Справочники.ТипыБазДанных.ТекущаяИБ);
	Иначе
		ТипОбъектаСогласования = Справочники.ДокументыБД.НайтиПоНаименованию(ОбъектСсылка.Метаданные().Имя,,,Справочники.ТипыБазДанных.ТекущаяИБ);
	КонецЕсли;	
	Если Не ЗначениеЗаполнено(ТипОбъектаСогласования) Тогда
		Возврат Ложь;
	КонецЕсли;	
	
	СтатусУтвержден = ТипОбъектаСогласования.ЗначениеРеквизитаСостоянияУтвержден;
	Если НЕ ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(СтатусУтвержден) Тогда
		РезультатПеревода = ПеревестиЗаявкуВПроизвольноеСостояние(ОбъектСсылка, СтатусУтвержден, , , , ДокументПроцесса, , , ИдентификаторФормыДляВыводаПротокола, ИдентификаторСообщенияРабочий);
		Если Не РезультатПеревода Тогда
			Возврат Ложь;
		КонецЕсли;
	Иначе
		// Новый статус пустой, и его установка не требуется.
	КонецЕсли;
	
	Если ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.РеестрыСогласуемыхОбъектов") Тогда
		УстановитьСтатусыПодчиненныхОбъектов(ОбъектСсылка, "Утвержден");
	КонецЕсли;
	
	Возврат Истина;

КонецФункции		// ПеревестиЗаявкуВСостояниеУтверждена()
Показать


А по простыне из поста ответ простой. Любой хардкод это дичь и за такое надо отрубать руки по самую голову. А в тексте речь именно про хардкод. А то что там пароли и логины вопрос десятый
7. Cерый 30 30.06.25 21:44 Сейчас в теме
(5) Предлагаю открыть любую типовую конфигурацию и выполнить глобальный поиск "НайтиПоКоду", возможно, Вы согласитесь с правомерностью применения этой функции; кроме того, БД содержит индекс на код, это отработает быстрее всего, например, при импорте/экспорте между базами.
8. sanymust 57 01.07.25 01:03 Сейчас в теме
(7) Вы неверно трактуете мое сообщение, я допускаю "НайтиПоКоду()" как метод, но в специфичных случаях, когда код однозначно идентифицирует экземпляр объекта и не нарушит алгоритм в случае если код будет изменен руками и не будет зависеть от конкретной ИБ, а являться универсальным решением (в том числе в случаях некой синхронизации объектов по коду), я же говорил об использовании метода для справочников, где код для элемента является "переменной" и только актуален в конкретной базе (ну допустим есть индивидуумы которые организацию, склад, номенклатуру могут искать по коду или проверять его в условии на соответствие)
Cерый; +1 – Ответить
9. G_115674340522893393890 16.10.25 15:31 Сейчас в теме
Добрый день. Игорь где с вами можно пообщаться по поводу разработки обмена между сайтом и 1с.
10. markbraer 128 16.10.25 16:46 Сейчас в теме
(9) мой ник собака яндекс ру
11. G_115674340522893393890 16.10.25 17:16 Сейчас в теме
Отправил вам письмо на электронную почту
Для отправки сообщения требуется регистрация/авторизация