Как можно ограничить доступ к веб-сервису определенными клиентскими компьютерами?

Как можно ограничить доступ к веб-сервису определенными клиентскими компьютерами?

У нас есть веб-приложение (Apache/PHP), которое в настоящее время использует аутентификацию по имени пользователя/паролю и в настоящее время доступно из любой точки мира. В нем включен SSL на стороне сервера.

Наша клиентская программа — это версия FireFox, которую мы модифицировали и переименовали. Этот модифицированный клиент Firefox предназначен только для подключения к нашему серверу веб-приложений. Пользователи должны использовать эту клиентскую программу для подключения к веб-сервису.

В дополнение к аутентификации пользователя мы хотели бы заблокировать доступ на уровне сервера для всех, кто не использует нашу клиентскую программу*. Поэтому, если пользователь вводит URI с помощью обычного браузера, ему будет отказано в доступе.

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

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

Пока что у меня есть несколько идей, как этого добиться.

1.) Встроить tolken в клиентское приложение, который отправляется, когда клиент выполняет вход (вход обрабатывается интерфейсом chrome/XUL). Это не будет блокироваться на уровне сервера, только на уровне приложения. Ключ можно украсть так же легко, как пароль, но его не так легко угадать методом подбора, поскольку он может быть любой длины или сложности.

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

2.) Встроить клиентский SSL-сертификат в клиентскую программу. Кажется, это может быть хорошим решением, но хорошей документации по SSL на стороне клиента почти не существует. Мы НЕ хотим подписывать сертификат для каждого пользователя, и мы не хотим, чтобы пользователь создавал сертификат или вообще беспокоился о диалогах безопасности. Закрытый ключ должен быть встроен в браузер, и это будет один ключ, общий для всех клиентских программ, и распределенный по установленным в нашем пользовательском браузере.

3.) Проверьте строку агента пользователя. Я думаю, Apache может ограничить на основе этого. Но это кажется слабой мерой в лучшем случае. Я бы, вероятно, сделал это в дополнение к другим мерам.

Надеюсь, у вас есть более подробная идея, как это сделать?

решение1

Включение клиентского SSL-сертификата в модифицированный браузер было бы проще и, вероятно, безопаснее.

Если вы используете один и тот же ключ для всех, вы теряете многие преимущества клиентских сертификатов, но это лучше, чем проверка useragent. И я предполагаю, что вам все равно потребуются имя пользователя и пароль для входа.

решение2

Вы думали о VPN? Это похоже на то, что вам действительно нужно.

Связанный контент