OAuth 2 – как безопасно запустить внешний браузер с C#?

Как лучше всего запустить внешний браузер с C#, чтобы запустить, например. поток кода авторизации OAuth 2.0?

Например, достаточно ли безопасно следующее:

System.Diagnostics.Process.Start(<some url>);

Что тогда, если злоумышленник зарегистрировал свой собственный инструмент вместо того, чтобы браузер перехватывал введенные учетные данные?

По сути, нет. Все, что вы можете сделать, это запустить браузер с URL-адресом страницы входа. Если вы хотите, вы можете запустить определенный браузер, если кто-то найдет правильный исполняемый файл для Firebox, Chrome, Edge и т. д. Если злоумышленнику удалось установить свой собственный браузер, он вряд ли получит доступ к правильным учетным данным, поэтому вам следует нужно, чтобы пользователь ввел их, но к этому моменту у них уже есть доступ к большей части локального ПК.

Neil 04.04.2024 20:53

@Neil - То есть с твоей точки зрения приемлемо (с точки зрения безопасности) просто запустить браузер, как описано? По той причине, что если злоумышленник уже имел доступ к компьютеру, то он мог/может делать все, что захочет?

Jakob Bjerre Jensen 05.04.2024 08:04

@Neil - это означает, что подход Process.Start приемлем с точки зрения безопасности?

Jakob Bjerre Jensen 05.04.2024 14:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
126
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете с какой-либо степенью разумной уверенности. Вы можете использовать тот же вызов функции и заменить URL-адрес путем к исполняемому файлу. Таким образом, вы контролируете, какой процесс запускается, но ссылка на этот исполняемый файл может быть перехвачена процессом с достаточными разрешениями через символическую ссылку на его вредоносный исполняемый файл, если он захочет. Есть ли причина, по которой это нужно обрабатывать в браузере, а не обрабатывать аутентификацию из командной строки?

VirusModulePointer. Моя «отправная точка» — это приложение с графическим интерфейсом, а не командная строка, и я хочу выполнить поток кода авторизации, заканчивающийся токеном доступа с сервера авторизации.

Jakob Bjerre Jensen 05.04.2024 08:30
Ответ принят как подходящий

Сильно влияет на поведение Azure при вводе следующей команды:

az login

Я думаю, что запуск System.Diagnostics.Process.Start(<some url>); при запуске потока кода авторизации OAuth2 допустим.

Глядя на исходный код Azure CLI , оказывается, что вызывается метод PublicClientApplication.acquire_token_interactive. PublicClientApplication из библиотеки MSAL . В конце концов вызывается Python webbrowser.open, который просто оценивается как

    p = subprocess.Popen(cmdline)

Это не лучше, чем Process.start().

Также стоит отметить, что между всплывающим окном браузера и командной строкой az login нет никакой связи в том смысле, что, например, закрытие окна браузера вместо авторизации не приведет к тому, что az login продолжит работу с ошибкой OAuth2 — командная строка просто зависнет.

Другие вопросы по теме