Обеспечение безопасности ключа API облачного сервиса от пользователей - PullRequest
1 голос
/ 18 февраля 2012

Я использую некоторый веб-API, который работает путем предоставления ключа API (строка из 40 символов).

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

Каждый вызов API выглядит как вызов POST:

http://www.someservice.com/api/method

Где фактические данные, переданные в запросе, содержат:

apiKey=myKeyHere....

Мой вопрос -как я могу запретить пользователям моего приложения раскрывать этот ключ API?

Эта специальная служба предоставляет хранилище рекордов для игр.Обеспечение легкодоступности моего API-ключа означает, что игроки моей игры смогут выдавать свои собственные запросы на регистрацию рекордов.

Я хотел бы либо Сложно кодировать его в коде (менее идеальное решение), либо оставить его внекоторый двоичный файл / файл конфигурации, который не может быть использован для определения фактической строки.

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

Ответы [ 2 ]

6 голосов
/ 18 февраля 2012

Пока вы используете такой простой протокол, в котором статический неизменяемый ключ отправляется на сервер, обфускация вашего ключа не имеет значения. Атакующий может просто понюхать трафик и извлечь ключ.

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

Вы не должны видеть ключи API на стороне клиента в качестве меры безопасности. Они ведут себя больше как заголовок пользовательского агента в http. Единственными ключами API, которые могут быть безопасными, являются ключи, хранящиеся на сервере, контролируемом разработчиком приложения, например в стороннем веб-приложении, использующем ваш API.

0 голосов
/ 18 февраля 2012

Чтобы защитить его в памяти, вы можете использовать SecureString .

Чтобы зашифровать его в каком-либо локальном хранилище (например, файле конфигурации, специфичном для пользователя или машины), вы можете использовать ProtectedData .

Если вам нужно передать его между системами, вы можете использовать один из многих алгоритмов шифрования, доступных в System.Security.Cryptography, таких как: RSACryptoServiceProvider .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...