Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Web API как альтернатива плагинам
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:Нет. Локальное приложение может узнать с какого сайта пришел запрос. Браузер передает эту информацию в заголовоке Origin, который из JS изменить нельзя. А кто мешает локальному приложению сделать такой же заголовок? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2015(UTC) Сообщений: 17  Откуда: Москва Сказал(а) «Спасибо»: 8 раз
|
Автор: cross  Цитата:Нет. Локальное приложение может узнать с какого сайта пришел запрос. Браузер передает эту информацию в заголовоке Origin, который из JS изменить нельзя. А кто мешает локальному приложению сделать такой же заголовок? Вы говорите о сценарии, где злоумышленник не сайт в бразере, а программа на компьютере, так? Тогда, что мешает ей использовать непосредственно КриптоПРО SDK или ваш плагин к браузеру, передав ему ложную информацию о домене? Отредактировано пользователем 3 ноября 2015 г. 14:26:48(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2015(UTC) Сообщений: 17  Откуда: Москва Сказал(а) «Спасибо»: 8 раз
|
Автор: Смирнов  Глубоко в данную тему мы не вдумывались. Однако, на поверхности лежит одна глобальная проблема с юзабилити. Если эту штуку сделать как системный сервис, то она не сможет ни понять ключами какого пользователя нужно подписывать, ни получить к ним доступ. Остаётся вариант простого приложения, работающего в фоне в сессии пользователя. Но тогда, если работает одновременно несколько пользователей, то их процессы не смогут слушать на одном порте, а значит JS-код в браузере должен как-то найти нужный процесс нужного пользователя. Как вы собираетесь решать эту задачу? Решить эту проблему можно, разбив приложение на части: "слушатель" и "логика". Каждая часть представляет собой процесс. Процессы взаимодействуют друг с другом через пайп. Процесс "слушатель" один на всех пользователей ОС, а процесс "логика" создается для каждого пользователя свой. Но ваш вопрос открыл глаза на более важную проблему: как узнать, какой пользователь стучится к нам на сокет. Этот момент мы упустили из виду, а ведь это дыра в безопасности, если за одним компьютером работает несколько человек, каждый под своим аккаунтом. Есть догадки, как решить ее. Берем время на подумать. А пока придется принять это как ограничение, т.е. один компьютер - один пользователь.  А если все же несколько пользователей, то "поработал - заверши сеанс". Отредактировано пользователем 3 ноября 2015 г. 15:04:22(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: dizel3d  Автор: cross  Цитата:Нет. Локальное приложение может узнать с какого сайта пришел запрос. Браузер передает эту информацию в заголовоке Origin, который из JS изменить нельзя. А кто мешает локальному приложению сделать такой же заголовок? Вы говорите о сценарии, где злоумышленник не сайт в бразере, а программа на компьютере, так? Тогда, что мешает ей использовать непосредственно КриптоПРО SDK или ваш плагин к браузеру, передав ему ложную информацию о домене? В вашем сценарии программа на компьютере, запущенная другим пользователем, сможет подписать моими ключами. С плагином такого вектора атаки нет. Автор: dizel3d  Решить эту проблему можно, разбив приложение на части: "слушатель" и "логика". Каждая часть представляет собой процесс. Процессы взаимодействуют друг с другом через пайп. Процесс "слушатель" один на всех пользователей ОС, а процесс "логика" создается для каждого пользователя свой. Таким образом вы уберёте логику выбора адреса из клиентского JavaScript, но точно такую же задачу придётся решить в процессе-"слушателе". Автор: dizel3d  Но ваш вопрос открыл глаза на более важную проблему: как узнать, какой пользователь стучится к нам на сокет. Этот момент мы упустили из виду, а ведь это дыра в безопасности, если за одним компьютером работает несколько человек, каждый под своим аккаунтом. Есть догадки, как решить ее. Берем время на подумать.  Ага, см. также мой первый комментарий в этом посте. Автор: dizel3d  А пока придется принять это как ограничение, т.е. один компьютер - один пользователь.  А если все же несколько пользователей, то "поработал - заверши сеанс". Возможно, подойдёт в качестве кастомного решения для конкретной системы. Как универсальное средство - уже нет. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Еще один минус такого подхода: сервис в 15 человекочасов на .NET будет крайне плохо переносится на платформы отличные от MS. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2015(UTC) Сообщений: 17  Откуда: Москва Сказал(а) «Спасибо»: 8 раз
|
Автор: Смирнов  Таким образом вы уберёте логику выбора адреса из клиентского JavaScript, но точно такую же задачу придётся решить в процессе-"слушателе".
Поясню. Предположим, что мы уже умеем узнавать, кто к нам стучится на сокет. Тогда мы можем именовать пайпы как-то так: PIPE_USER_1, PIPE_USER_2. И слушатель будет просто форвардить запросы по соответствующему пайпу. Т.е. в итоге все упирается в то, что мы не знаем кто к нам стучится на сокет. И решив эту проблему без применения явной авторизации, получится вроде бы безопасное решение с юзабилити сравнимым с плагином. Или вы видите еще загвоздки?
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2015(UTC) Сообщений: 17  Откуда: Москва Сказал(а) «Спасибо»: 8 раз
|
Автор: cross  Еще один минус такого подхода: сервис в 15 человекочасов на .NET будет крайне плохо переносится на платформы отличные от MS. Написать на Go или NodeJS для нас не проблема. Но есть сомнения в другом: если мы все же решим проблему с многосеансовостью в Windows, сможем ли мы решить ее в UNIX. Но этот вопрос стоит для КриптоПро, а Валидата только в Windows работает, если не ошибаюсь.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 21.11.2010(UTC) Сообщений: 1,168
Сказал(а) «Спасибо»: 8 раз Поблагодарили: 164 раз в 149 постах
|
Автор: dizel3d  Но ваш вопрос открыл глаза на более важную проблему: как узнать, какой пользователь стучится к нам на сокет Для локального приложения - вообще не проблема. И вообще - давным-давно решено всевозможными файерволами и антивирусами с проверкой интернет-трафика. Другой вопрос, что архитектура такого сервиса начинает усложняться, т.к. придётся делать и службу и какой-то механизм имперсонификации.
|
|
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: basid  Для локального приложения - вообще не проблема. Поделитесь секретом. Приложение получает входящий HTTP-запрос без аутентификации. Оно знает, что соединение открыто с того же компьютера. Как понять какой пользователь открыл соединение? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.10.2015(UTC) Сообщений: 17  Откуда: Москва Сказал(а) «Спасибо»: 8 раз
|
Автор: Смирнов  Автор: basid  Для локального приложения - вообще не проблема. Поделитесь секретом. Приложение получает входящий HTTP-запрос без аутентификации. Оно знает, что соединение открыто с того же компьютера. Как понять какой пользователь открыл соединение? Получаем список соответствия Connection-PID (его, кстати, можно вывести консольной командой netstat). Ищем в нем наш Connection, получаем PID. По PID получаем ID сеанса. По ID сеанса получаем ID пользователя ОС. Такая схема не требует прав администратора, и скорей всего работает во всех ОС. В Windows работает точно, проверили. У нас уже готов черновой вариант, описывающий архитектуру, где решена проблема сеансовой безопасности крипто-сервиса, на которую вы указали. Намерены с вами поделиться.
|
|
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Web API как альтернатива плагинам
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close