Как программно определить степень сложности пароля пользователя в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе администрирования информационных баз 1С часто возникает задача аудита безопасности. Одной из таких задач является создание отчета, который показывал бы степень надежности паролей пользователей: "простой", "средний" или "надежный". Однако при реализации этой функции разработчики сталкиваются с серьезным архитектурным ограничением платформы. В этой статье мы подробно разберем, почему нельзя проверить сложность уже существующего пароля, как работает механизм хранения учетных данных и какие инструменты предоставляет Библиотека стандартных подсистем (БСП) для контроля безопасности.

Почему невозможно определить сложность текущего пароля?

Давайте проанализируем, как система «1С:Предприятие 8» хранит информацию о паролях. Платформа придерживается строгих стандартов безопасности, согласно которым пароли никогда не сохраняются в открытом виде. Вместо самого пароля в базе данных хранится его хеш-сумма (в современных версиях используется алгоритм SHA-256).

Разберем по шагам, что это означает для нас как для разработчиков:

  1. Когда пользователь вводит пароль, система вычисляет его хеш.
  2. В таблице пользователей сохраняется именно этот хеш (строка фиксированной длины).
  3. При следующей авторизации введенная строка снова хешируется, и результат сравнивается с тем, что хранится в базе.
  4. Хеширование является необратимой функцией. Это значит, что из хеша невозможно восстановить исходный пароль.

Следовательно, программный доступ к свойству Пароль объекта ПользовательИнформационнойБазы закрыт. Мы можем только программно установить новый пароль, но не прочитать старый. Если мы не можем прочитать пароль, мы не можем проверить его на количество символов, наличие цифр или специальных знаков. Таким образом, создание колонки "Степень сложности" в отчете по уже существующим паролям технически невыполнимо. Для практического аудита стойкости учетных записей можно использовать инструмент для анализа паролей пользователей методом перебора.

Механизмы платформы для обеспечения сложности паролей

Если мы не можем проверить старые пароли, то мы можем и должны контролировать установку новых. Платформа 1С (начиная с версии 8.3.3) содержит встроенные настройки политики паролей. Рассмотрим, как ими воспользоваться в Конфигураторе:

Откроем меню Администрирование — Параметры информационной базы. Здесь мы увидим раздел "Политика паролей", где можно задать следующие критерии:

Когда эти опции включены, платформа сама блокирует попытку создания "простого" пароля, выдавая системное сообщение об ошибке. Однако признак того, что пароль "сложный", нигде в метаданных пользователя не проставляется — система просто гарантирует, что другой пароль не прошел бы валидацию.

Использование функционала БСП для контроля паролей

Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), у вас есть гораздо более гибкие инструменты. В БСП реализована подсистема "Пользователи", которая берет на себя управление сложностью паролей в режиме "1С:Предприятие".

Посмотрим, как в БСП реализована подсказка для пользователя. В общем модуле ПользователиСлужебный (или аналогичных модулях в зависимости от версии) можно найти функцию, которая определяет текстовое описание критериев надежности. Рассмотрим пример логики, которую использует БСП:


Функция ПодсказкаДляНовогоПароля() Экспорт
    ТекстПодсказки = НСтр("ru = 'Надежный пароль:
    |- имеет не менее 7 символов;
    |- содержит любые 3 из 4-х типов символов: заглавные буквы, строчные буквы, цифры, специальные символы;
    |- не совпадает с именем (для входа).'");
    Возврат ТекстПодсказки;
КонецФункции

Важно понимать: БСП проверяет сложность пароля в момент его ввода в форму. Поскольку в форме ввода пароль доступен в виде обычной строки (до того, как он превратится в хеш и запишется в базу), программный код может проанализировать его с помощью регулярных выражений или простых переборов.

Как реализовать проверку сложности (алгоритм)

Если вам необходимо написать свою процедуру проверки сложности пароля (например, при создании собственной формы смены пароля), проанализируем следующий алгоритм, соответствующий стандартам безопасности:


Функция ПарольОтвечаетТребованиямСложности(Знач Пароль, Знач ИмяПользователя) Экспорт
    
    // 1. Проверка минимальной длины
    Если СтрДлина(Пароль) < 7 Тогда
        Возврат Ложь;
    КонецЕсли;
    
    // 2. Проверка на совпадение с логином
    Если Найти(ВРег(Пароль), ВРег(ИмяПользователя)) > 0 Тогда
        Возврат Ложь;
    КонецЕсли;
    
    // 3. Подсчет типов символов
    КоличествоТипов = 0;
    
    Если РегулярноеВыражениеПроверка(Пароль, "[a-zа-я]") Тогда
        КоличествоТипов = КоличествоТипов + 1;
    КонецЕсли;
    
    Если РегулярноеВыражениеПроверка(Пароль, "[A-ZА-Я]") Тогда
        КоличествоТипов = КоличествоТипов + 1;
    КонецЕсли;
    
    Если РегулярноеВыражениеПроверка(Пароль, "[0-9]") Тогда
        КоличествоТипов = КоличествоТипов + 1;
    КонецЕсли;
    
    Если РегулярноеВыражениеПроверка(Пароль, "[!@#$%^&*()_+-=]") Тогда
        КоличествоТипов = КоличествоТипов + 1;
    КонецЕсли;
    
    // Пароль считается надежным, если содержит 3 типа символов из 4
    Возврат КоличествоТипов >= 3;

КонецФункции

Этот код позволяет валидировать строку пароля перед сохранением. Но, опять же, он поможет вам только в момент изменения данных пользователя, а не для анализа старых записей.

Практические советы для администратора

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

  1. Принудительное обновление: В БСП есть возможность установить флаг Потребовать смену пароля при следующем входе. Установите этот флаг для всех пользователей, чьи пароли вызывают у вас сомнение. При первом же входе система заставит их ввести новый пароль, который уже будет проверен на соответствие вашим критериям сложности.
  2. Анализ даты установки: Программно можно получить дату последнего изменения пароля (через Журнал регистрации или дополнительные регистры БСП). Если пароль не менялся более года, это повод для принудительного обновления.
  3. Использование доменной аутентификации: Самый надежный способ — делегировать проверку сложности операционной системе. Настройте аутентификацию ОС (Active Directory). В этом случае политики сложности будут управляться системным администратором на уровне домена, а 1С будет лишь доверять результату входа.
  4. Отчет по пустым паролям: Единственное, что можно вывести в отчет достоверно — это признак того, установлен пароль вообще или нет. Для этого используется свойство ПарольУстановлен объекта ПользовательИнформационнойБазы.

Подведем итог: безопасность в 1С реализована таким образом, чтобы даже администратор не мог узнать пароли пользователей. Это стандарт индустрии. Вместо попыток "прочитать" сложность, сосредоточьтесь на внедрении строгих политик при создании новых учетных записей и использовании механизмов БСП для регулярной ротации паролей.

← На главную