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

Как получить пароль пользователя 1с программно

  • автор:

Как программно прочитать пароль пользователя ИБ?

Всем привет. Есть задача, вывести на форму поле, в которое пользователь забивает пароль пользователя, если пароль не верен, то ничего не происходит, если введенный пароль верен, то происходит чудо.

Проблема в том, что реквизит пароль у пользователя ИБ недоступен для чтения. Кто подскажет как выйти из положения?

(2) а хз. Ты ж не говришь, какая у тебя задача. Ты рассказываешь, как ты ее решать собрался.
В этой стороне решения нет.

Хочешь подсказок, рассказывай задачу. Не хочешь рассказывать — думай сам

Есть база 1с, в базе, работают под 1 сеансом, и под одним сеансом работает несколько менеджеров.
С утра, когда приходят менеджеры, им надо создать уникальный документ, в котором отражается начало и конец смены.

По задумке, менеджер должен заполнить реквизиты документа, а потом ввести свой пароль. Если пароль пользователя совпадает, то то тогда документ записывается, если не совпадает, тогда се ля ви.

ps вспомнил, есть обработка перенос пользователей ИБ, сейчас посмотрю, они как то там хитрозадо из xml этот пароль перетаскивают.

(14) дай им штрихкод на телефон.
Пришел на работу, показал телефон сканеру, сканер запомнил, когда пришел этот чел на работу. Задача решена без паролей.

Да, будут передавать шриходы друг другу. Но они и пароли так же будут передавать

А штрихкоды можно ночером новые слать

какое хеширование используется в пароле?

HASH / MESSAGE DIGEST АЛГОРИТМЫ
MD5 Hash
SHA1 хэш
SHA256 Хэш
SHA384 Хэш
SHA512 Хэш
RIPE MD160 Hash

Их вона как много

Хешер = Новый ХешированиеДанных(ХэшФункция.SHA256);
Хешер.Добавить("влоарфыдлрдларфыдлвпрыдлпрвыдпы");

(28) (31) (33) (35) есть такой человек — руководитель отдела продаж. У него голова как у лошади — большая. Вот пусть ей и думает.

Мое дело телячье — сделал и сдал. Потом переделал, еще заработал.

Класс, есть типовая функция:

// Возвращает сохраняемое значение пароля для указанного пароля.
//
// Параметры:
// Пароль — Строка — пароль для которого нужно получить сохраняемое значение.
//
// ИдентификаторПользователяИБ — УникальныйИдентификатор — пользователя ИБ для которого нужно
// сравнить сохраняемое значение с полученным и результат поместить
// в следующий параметр Совпадает.
//
// Совпадает — Булево (возвращаемое значение) — см. комментарий к параметру.
// ИдентификаторПользователяИБ.
// Возвращаемое значение:
// Строка — сохраняемое значение пароля.
//
Функция СохраняемоеЗначениеСтрокиПароля(Знач Пароль,
Знач ИдентификаторПользователяИБ = Неопределено,
Совпадает = Ложь) Экспорт

Узнаем пароли пользователей 1С

Возможность тестировалась на платформе 1с версии 8.1.13.41 и 8.2.10.82 (думаю на 8.0 ситуация обстоит так же) на операционной системе Windows Server 2008 как 32 так и 64 битной под правами локального администратора в терминальной сессии. На самом деле и на операционных системах «постарее» можно узнать пароль, просто не так банально как на тестируемой ОС.

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

Запустите диспетчер задач и нажмите на кнопку «Отображать процессы всех пользователей», далее в появившемся окне нажмите на кнопку «Продолжить». После выбираем пункт меню: «Вид» -> «Выбрать столбцы…» и в появившемся окне ставим галку напротив пункта «Командная строка» и нажимаем кнопку «Ок». Ищем глазами процесс 1cv8.exe и наблюдаем примерно такое:
image

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

Не буду делать акцент на том, что у многих смертных один и тот же пароль используется не только для доступа к ИБ 1С и к каким последствиям может привести факт владения паролем другой стороной. Хочу лишь отметить, что все потуги самой 1С использовать алгоритмы шифрования AES, Triple DES, протокол SSL для доступа к ИБ, хранение паролей пользователей в таблице базы данных в специальном формате перечеркиваются вышеприведенным способом авторизации.

Работа с паролями пользователей в 1С

Для того чтобы программно задать пароль пользователя в 1С, нужно сначала получить нужного пользователя информационной базы. Для этого используется метод НайтиПоИмени() менеджера пользователей информационной базы.

Установка нового пароля

Для установки нового пароля пользователя 1С, его нужно записать в свойство Пароль пользователя информационной базы. Это свойство недоступно для чтения, поэтому, записав туда пароль, прочитать его уже не удастся.

После установки пароля свойство ПарольУстановлен пользователя информационной базы примет значение Истина. Пароль начнет работать после перезапуска системы.

Установка требований к сложности пароля в 1С

Система 1С:Предприятие имеет встроенный механизм проверки сложности паролей пользователей. Функция включается через Конфигуратор, меню Администрирование — Параметры информационной базы — Проверка сложности паролей пользователей.

При включении этой функции пароль проверяется на соответствие следующим требованиям:

  • Длина не менее 7 символов;
  • Содержит не менее 3-х типов символов:
    • заглавные буквы;
    • строчные буквы;
    • цифры;
    • спец. символы.
    • Не совпадает с именем пользователя;
    • Не является последовательностью символов.

    Можно включить эту функцию программно:

    Для проверки вводимого пользователем пароля на соответствие этим требованиям попытаемся создать временного пользователя с заданным паролем. В функцию мы будем передавать сам новый пароль. Функция будет возвращать значение Истина, если пароль соответствует требованиям, и Ложь — если не соответствует.

    Функция ПарольСоответствуетТребованиям ( Пароль )

    //Убедимся, что проверка сложности включена
    УстановитьПроверкуСложностиПаролейПользователей ( Истина ) ;

    //Создадим временного пользователя и установим его параметры
    ВременныйПользовательИБ = ПользователиИнформационнойБазы . СоздатьПользователя ( ) ;
    ВременныйПользовательИБ . АутентификацияСтандартная = Истина ;
    ВременныйПользовательИБ . Имя = НСтр ( "ru = ‘Временный пользователь’" ) +
    " (" + Строка ( Новый УникальныйИдентификатор ) + ")" ;

    //Установим временному пользователю требуемый пароль
    ВременныйПользовательИБ . Пароль = Пароль ;

    //Попытаемся записать временного пользователя.
    //Если появится ошибка, значит пароль не соответствует требованиям
    ХорошийПароль = Истина ;

    //Удалим временного пользователя
    ВременныйПользовательИБ . Удалить ( ) ;

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

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

    Пароль из информационной базы мы можем получить только в хешированном виде через свойство СохраняемоеЗначениеПароля пользователя ИБ.

    Для проверки соответствия введенного пароля паролю из информационной базы можно использовать следующую функцию. В нее мы передадим введенный пароль и имя пользователя. Функция вернет значение Истина, если пароль соответствует паролю информационной базы, и Ложь — если не соответствует.

    Функция ПроверитьПароль ( Пользователь , Пароль )

    //Получим пользователя ИБ
    ПользовательИБ = ПользователиИнформационнойБазы . НайтиПоИмени ( Пользователь ) ;

    //Получим хешированное представление введенного пароля
    ХешированиеДанных = Новый ХешированиеДанных ( ХешФункция . SHA1 ) ;
    ХешированиеДанных . Добавить ( Пароль ) ;
    ХешированныйНовыйПароль = Base64Строка ( ХешированиеДанных . ХешСумма ) ;
    ХешированиеДанных = Новый ХешированиеДанных ( ХешФункция . SHA1 ) ;
    ХешированиеДанных . Добавить ( ВРег ( Пароль ) ) ;
    ХешированныйНовыйПароль = ХешированныйНовыйПароль + "," + Base64Строка ( ХешированиеДанных . ХешСумма ) ;

    //Сравним полученный хешированный пароль и хешем пароля в информационной базе
    Возврат ХешированныйНовыйПароль = ПользовательИБ . СохраняемоеЗначениеПароля ;

    1С 8.3 Получить сохраненные пароли — Программист 1С Минск. Автоматизация бизнеса.

    // Функция позволяет:
    // получить пароль системной учетной записи 1С
    // учетный данные для обмена 1С с интернет магазином
    // внутренний адрес менеджера сервиса
    // пароль интернет поддержки пользователей
    // и другие учетные жданные 1С

    ДанныеСтр = Новый Структура ();

    Запрос = Новый Запрос ;
    Запрос . Текст =
    «ВЫБРАТЬ
    | БезопасноеХранилищеДанных.Данные КАК Данные
    |ИЗ
    | РегистрСведений.БезопасноеХранилищеДанных КАК БезопасноеХранилищеДанных
    |ГДЕ
    | БезопасноеХранилищеДанных.Владелец = &Владелец» ;

    //будет выведен не весь список, а по конкретному владельцу
    //Запрос.УстановитьПараметр(«Владелец», Владелец);
    РезультатЗапроса = Запрос . Выполнить (). Выбрать ();

    Если РезультатЗапроса . Следующий () Тогда
    Если ЗначениеЗаполнено ( РезультатЗапроса . Данные ) Тогда
    ДанныеИзХранилища = РезультатЗапроса . Данные . Получить ();
    Если ЗначениеЗаполнено ( ДанныеИзХранилища ) Тогда
    ЗаполнитьЗначенияСвойств ( ДанныеСтр , ДанныеИзХранилища );
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

    Процедура Получить_сохраненные_пароли_БСП ( IDподсистемы ) Экспорт

    ОбщегоНазначения . ПрочитатьДанныеИзБезопасногоХранилища ( IDподсистемы , «Пароль» );

    Процедура Получить_сохраненные_пароль_и_логин_ИТС () Экспорт

    Авторизация = ИнтернетПоддержкаПользователей . ДанныеАутентификацииПользователяИнтернетПоддержки ();
    Логин_авторизация = «» ;
    Пароль_авторизация = «» ;

    Попытка
    Для Каждого ЭлементАвторизации Из Авторизация Цикл
    Сообщить ( ЭлементАвторизации . Ключ + » Логин» Тогда
    Логин_авторизация = ЭлементАвторизации . Значение ;
    Сообщить ( «Логин: » + Логин_авторизация );
    ИначеЕсли ЭлементАвторизации . Ключ = «Пароль» Тогда
    Пароль_авторизация = ЭлементАвторизации . Значение ;
    Сообщить ( » Пароль : » + Пароль_авторизация );
    КонецЕсли;
    КонецЦикла;
    Исключение

    Сообщить ( «Регистрационные данные ИТС отсутствуют!» );
    //Добавить свои данных в хранилище можно так:
    //ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ИнтернетПоддержкаПользователей.ИдентификаторПодсистемы(), «Ваш логин от ИТС», «login»);
    //ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ИнтернетПоддержкаПользователей.ИдентификаторПодсистемы(), «Ваш Пароль от ИТС», «password»);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *