powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли изменить значение UserName?
35 сообщений из 35, показаны все 2 страниц
Можно ли изменить значение UserName?
    #39806844
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть приложение (мое), вызывает ассембли (чужое), там берется Environment.UserName и что-то с ним делается.
Можно ли как-то изменить это значение в приложении: Environment.UserName?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806848
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин, это поврапанный вызов GetUserName из ADVAPI32...
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806849
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа impersonation, наверное, нужно.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806853
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806854
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserРолг Хупин, это поврапанный вызов GetUserName из ADVAPI32...
Здравствуйте, Капитан
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806860
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, ну... как бы это был ответ на вопрос.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39806864
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинЕсть приложение (мое), вызывает ассембли (чужое), там берется Environment.UserName и что-то с ним делается.
Можно ли как-то изменить это значение в приложении: Environment.UserName?
Как вариант, можно использовать имперсонализацию, за этим последует и смена все прав пользователя, это стоит учитывать.
Либо использовать mock сборку
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;

namespace ImpersonalizationExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Environment.UserName);
            Impersonalization.Logon("HackerMan", "Qwerty1");
            Console.WriteLine(Environment.UserName);
            Console.ReadKey();
        }
    }

    public static class Impersonalization
    {
        //Подкючаем API

        [DllImport("kernel32.dll")]
        private static extern int GetLastError();

        [DllImport("advapi32.dll")]
        private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
        [DllImport("advapi32.dll")]
        private static extern bool DuplicateToken(IntPtr ExistingTokenHandle, int ImpersonationLevel, ref IntPtr DuplicateTokenHandle);

        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(IntPtr hObject);

        /// <summary> Тип входа </summary>
        private enum LogonTypes
        {
            LOGON32_PROVIDER_DEFAULT = 0,
            LOGON32_LOGON_INTERACTIVE = 2,
            LOGON32_LOGON_NETWORK = 3,
            LOGON32_LOGON_BATCH = 4,
            LOGON32_LOGON_SERVICE = 5,
            LOGON32_LOGON_UNLOCK = 7,
            LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
            LOGON32_LOGON_NEW_CREDENTIALS = 9
        }

        /// <summary> Уровень имперсоонализации </summary>
        private enum SecurityImpersonationLevel
        {
            SecurityAnonymous,
            SecurityIdentification,
            SecurityImpersonation,
            SecurityDelegation
        }

        /// <summary>
        /// Имперсоонализироваться под заданным пользователем
        /// </summary>
        /// <param name="username">Имя пользователя в формате DOMAIN\User или User</param>
        /// <param name="password">Пароль пользователя</param>
        /// <returns>Контекст имперсоонализации</returns>
        public static WindowsImpersonationContext Logon(string username, string password)
        {

            //Аллоцируем указатели токена
            IntPtr existingTokenHandle = IntPtr.Zero;
            IntPtr duplicateTokenHandle = IntPtr.Zero;

            //Разбиваем имять пользователя на домен и имя, если домен не указан, то должен быть равен пустой строке
            string domain;
            if (username.Contains("\\"))
            {
                string[] splitUserName = username.Split('\\');
                domain = splitUserName[0];
                username = splitUserName[1];
            }
            else
            {
                domain = string.Empty;
            }

            bool isOk = true;

            try
            {
                //Получаем токен безопасности
                isOk = LogonUser(username, domain, password,
                    (int)LogonTypes.LOGON32_LOGON_INTERACTIVE, (int)LogonTypes.LOGON32_PROVIDER_DEFAULT,
                    ref existingTokenHandle);

                if (!isOk)
                {
                    int lastWin32Error = Marshal.GetLastWin32Error();
                    int lastError = GetLastError();

                    throw new LogonException("LogonUser Failed", lastWin32Error, lastError);
                }

                // Делаем дубликат токена

                isOk = DuplicateToken(existingTokenHandle, (int)SecurityImpersonationLevel.SecurityImpersonation,
                    ref duplicateTokenHandle);

                if (!isOk)
                {
                    //Если не удалось клонировать Token, освобождаем 
                    int lastWin32Error = Marshal.GetLastWin32Error();
                    int lastError = GetLastError();
                    throw new LogonException("DuplicateToken Failed", lastWin32Error, lastError);
                }
                else
                {
                    // Если всё ок, созаем Indentity пользователя
                    WindowsIdentity newId = new WindowsIdentity(duplicateTokenHandle);
                    WindowsImpersonationContext impersonatedUser = newId.Impersonate();

                    return impersonatedUser;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //Освобождаем ресурсы
                if (existingTokenHandle != IntPtr.Zero)
                {
                    CloseHandle(existingTokenHandle);
                }
                if (duplicateTokenHandle != IntPtr.Zero)
                {
                    CloseHandle(duplicateTokenHandle);
                }
            }
        }

        [Serializable]
        public class LogonException : Exception
        {
            /// <summary>
            /// Коды ошибок можно посмотреть тут https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes
            /// </summary>
            public int LastWin32Error { get; }
            /// <summary>
            /// Коды ошибок можно посмотреть тут https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes
            /// </summary>
            public int LastError { get; }

            public LogonException() { }
            public LogonException(string message) : base(message) { }
            public LogonException(string message, Exception innerException) : base(message, innerException) { }
            public LogonException(string message, int lastWin32Error, int lastError) : this(message)
            {
                LastWin32Error = lastWin32Error;
                LastError = lastError;
            }
        }
    }
}


Результат выполнения:
Код: sql
1.
2.
roman.meytes
HackerMan
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807007
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я так понял, что это способ что-то выполнить от имени другого пользователя, если известен его логин и пароль?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807009
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Ага и надо юзать using для возвр. Старых прав, в коде.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807026
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Я так понял, что это способ что-то выполнить от имени другого пользователя, если известен его логин и пароль?думаю это только в целях тестирования.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807480
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Cat2Я так понял, что это способ что-то выполнить от имени другого пользователя, если известен его логин и пароль?думаю это только в целях тестирования.

исключительно!

есть одна уитилта, в которой внутри стоит проверка, если юзернейм="administrator", то меньше всяких лишних движений
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807525
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Cat2Я так понял, что это способ что-то выполнить от имени другого пользователя, если известен его логин и пароль?думаю это только в целях тестирования.

С какого такого? Для серверных приложений вполне себе обыденная задача - сделать что-то не от своего имени, а от имени клиента.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807534
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Ну я не знаю этих обыденных задач.
В веб есть обезличенный анонимный коннект аппСервера к бд. Его зовут технологическим.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807539
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ну я не знаю этих обыденных задач.
Есть многое на свете, друг Горацио, что и не снилось нашим мудрецам (с)
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807544
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
Ну я не знаю этих обыденных задач.
В веб есть обезличенный анонимный коннект аппСервера к бд. Его зовут технологическим.

Чо?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807552
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
В десктопе каждый юверь ходит под своим коннектом.
В веб проектах в базе админу виден ОДИН коннект. Так называемы обезличенный публичный пользователь. Спроси у админов.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807554
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
))
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807568
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
В десктопе каждый юверь ходит под своим коннектом.
В веб проектах в базе админу виден ОДИН коннект. Так называемы обезличенный публичный пользователь. Спроси у админов.
Сервер приложений работой с БД далеко не всегда ограничивается. Например, ему может быть нужно прочитать файлы с шары, к которой у его собственного аккаунта доступа нет. Я согласен, ситуация, когда нужна имперсонация не такая уж и частая, но она бывает. Неспроста ведь в IIS её из коробки даже встроили, через настройку в web.config.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807574
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинесть одна уитилта, в которой внутри стоит проверка, если юзернейм="administrator",
чё, так прямо гвоздями и прибито?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807582
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилРолг Хупинесть одна уитилта, в которой внутри стоит проверка, если юзернейм="administrator",
чё, так прямо гвоздями и прибито?
Если это просто утилита, то может обычный "runas" поможет? Зачем сразу кидаться что-то свое писать?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807589
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилРолг Хупинесть одна уитилта, в которой внутри стоит проверка, если юзернейм="administrator",
чё, так прямо гвоздями и прибито?

в точку! строка в коде (ну как , в коде... ;-) ) сидит и проверяется текущий юзер
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807590
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatИзопропилпропущено...

чё, так прямо гвоздями и прибито?
Если это просто утилита, то может обычный "runas" поможет? Зачем сразу кидаться что-то свое писать?


Будем искренними - не утилита, ассембль
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807592
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
Ну я не знаю этих обыденных задач.
В веб есть обезличенный анонимный коннект аппСервера к бд. Его зовут технологическим.

Чо?

не, не "чо", а "технологическим"
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807593
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

а если UserName окажется "Администратор" -проверка не пройдёт?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807599
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatк которой у его собственного аккаунта доступа нет.а юзверя Гость есть?
Непонятно.

fkthatсогласен, ситуация, когда нужна имперсонация не такая уж и частая,
Ну вот видишь, консенсус)
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807604
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatк которой у его собственного аккаунта доступа нет.а юзверя Гость есть?
Непонятно.

fkthatсогласен, ситуация, когда нужна имперсонация не такая уж и частая,
Ну вот видишь, консенсус)

Так имперсонация не юзера "гость" идет, а какого-то конкретного, у кого как раз доступ есть.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807605
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatк которой у его собственного аккаунта доступа нет.а юзверя Гость есть?
Непонятно.

fkthatсогласен, ситуация, когда нужна имперсонация не такая уж и частая,
Ну вот видишь, консенсус)

Ты никуя не видишь разницу между "нечасто, но бывает" и "не бывает никогда"?
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807608
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинБудем искренними - не утилита, ассембль
Обращайтесь в профсоюз - требуйте нормальные библиотеки :-) Такая захардкоженная проверка внутри сборки, это уже вообще ни в какие ворота.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807613
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatи "не бывает никогда"?кто это сказал?
Покажи.
Не хочешь консенсус?)))
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807616
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я помню, то в AD объект пользователя доступен для изменения его владельцу.
То есть, я могу менять часть свойств своей учетной записи, без прав администратора.
По этому привязываться к открытым полям типа имя или почтовый адрес учётной записи точно не стоит.
То есть, злоумышленник может получить доступ к какой либо учётке в вашей ад (а среди 1000 юзеров всегда найдутся идиоты), поменять в ней свое имя на Администратор и получить доступ администратора в вашей программе.
Или задать такое имя, которое ваша система не переварит или всегда будет возвращать нужный результат.
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807621
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatи "не бывает никогда"?кто это сказал?
Покажи.
Не хочешь консенсус?)))

Главное, чтоб не коитус
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807630
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Я топлю за то что сабж для тестирования)
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807738
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилРолг Хупин,

а если UserName окажется "Администратор" -проверка не пройдёт?

не, но это уже другая история, там сравнение строки с UserName
Я так понимаю, что у девелоперов там не может быть русского слова
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807753
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Roman Mejtes,
Я топлю за то что сабж для тестирования)
Уже ведь написали зачем. Ты как всегда не читаешь перед тем как писать? :-)
...
Рейтинг: 0 / 0
Можно ли изменить значение UserName?
    #39807757
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Дык я ведь не с тобой). Ты сегодня не с той ноги.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли изменить значение UserName?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]