Возможно ли принудительно выполнять вызовы веб-службы только от известного клиента?

StackOverflow https://stackoverflow.com/questions/1314055

Вопрос

Сценарий:

Общедоступный веб-сервис, который я полностью контролирую.Но я хочу, чтобы только это конкретное настольное приложение (мое опубликованное приложение) имело доступ к веб-сервису.Я мог бы сохранить секретный пароль в настольном клиенте, но его было бы легко взломать.

Существует ли какая-либо известная реализация, которая обеспечивает это?PKI, асимметричные ключи?

Это было полезно?

Решение

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

Целью криптографии является защита данных во время их передачи от хакеров-"посредников", но если у вас есть доступ к кому-либо из коллег, вы можете легко взломать их.

Ваш сервер никогда не должен доверять тому, что поступает со стороны клиента.

[возобновление редактирования]

Несмотря на то, что вы не можете на 100% гарантировать, что предполагаемый клиент для вашего сервера является вашим приложением или каким-то "эмулятором", созданным третьими лицами, вы можете усложнить им задачу.Это обычная практика в игровых античит-программах - иногда случайным образом задавать клиентскому приложению вопрос с подвохом типа "какой хэш у вашего main.exe от смещения A к смещению B?" или "отныне тип пакета 0x07 заменяется на тип пакета 0x5f".Как только подделка обнаружена, сервер переходит в "глупый режим", действует некорректно и заносит свой IP / учетную запись в черный список в этом режиме на несколько часов, чтобы они не могли быть уверены в том, что их программа делает неправильно.

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

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

WS-Безопасность обеспечивает шифрование X509.

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

Самый простой способ — безопасность сообщений с использованием сертификатов клиента и сервера.Лучший способ — импортировать клиентские сертификаты на ваши серверные машины и жестко закодировать отпечаток клиентского сертификата в файле app.config.Другой способ — согласование сертификатов, который я раньше не пробовал.

Если вы используете IIS для размещения службы, то сертификаты клиента с использованием SSL являются еще одним вариантом.

Ссылка на MSDN включена Безопасность WCF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top