Ограничение доступа к серверу для приложения iPhone - PullRequest
2 голосов
/ 17 декабря 2009

Я создаю клиент-серверную игру для iPhone, в которой я бы хотел, чтобы сторонние клиенты не могли получить доступ к серверу. Это объясняется двумя причинами: во-первых, моя модель дохода - продать клиента и раздать услугу, а во-вторых, я хочу избежать распространения клиентов, которые способствуют мошенничеству.

Я пишу первую версию сервера в рельсах, но в какой-то момент я думаю о переходе на erlang.

Я рассматриваю два подхода:

  1. Создайте «имя пользователя» (скажем, GUID) и хэшируйте его (SHA256 или MD5) с секретом, поставляемым с приложением, и используйте результат в качестве «пароля». Когда клиент соединяется с сервером, оба отправляются через HTTP Basic Auth через https. Сервер хэширует имя пользователя с тем же секретом и проверяет, совпадают ли они.

  2. Отправьте клиентский сертификат с помощью приложения для iPhone. Сервер настроен так, чтобы требовать наличия сертификата клиента.

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

Второй подход хорошо проверен и доказан, но может потребовать больших затрат. Однако мои знания о клиентских сертификатах находятся на уровне «читайте об этом в бортовом журнале Delta Airlines». Какую полосу пропускания и затраты на обработку это понесет? Фактические данные, передаваемые по запросу, имеют размер порядка килобайта.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2009

Нет идеального пути, но вызов / ответ лучше, чем ключ.

Сертификат ДОЛЖЕН использовать запрос / ответ. Вы отправляете случайную строку, она шифрует ее с помощью закрытого ключа сертификата, затем вы возвращаете ее и расшифровываете с помощью открытого ключа.

В зависимости от того, насколько хорошо материал поддерживается на iPhone, реализация будет между тривиальной и сложной задачей.

Хорошая средняя дорога, которую я использую, это xor. Он немного более безопасен, чем пароль, прост в реализации и требует не менее часа или двух усилий для взлома.

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

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

В любом случае, xor - это взлом, но он работает в случаях, когда отправка пароля немного взломана.

Разница между xor и открытым ключом заключается в том, что xor ЛЕГКО обратим, просто следя за успешным разговором, открытый ключ (теоретически) необратим без значительных ресурсов и времени.

2 голосов
/ 17 декабря 2009

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

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

0 голосов
/ 17 декабря 2009

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

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

...