2012-07-05 3 views
4

У меня есть приложение для iPhone, которое использует мой php api на сервере, но в настоящее время он открыт, если кто-то знает URL. Я хочу, чтобы убедиться, что никто не может использовать этот API, пока я не готов сделать это публичный API (если я даже делать)Защита доступа к PHP API

Я прочитал this article, но я не уверен, что они имеют в виду, когда они говорят:

[CLIENT] Перед вызовом API REST объедините вместе множество уникальных данных (обычно это все параметры и значения, которые вы намереваетесь отправить, это аргумент «данные» в фрагментах кода на сайте AWS)

Я не понимаю, как если бы у меня были параметры, которые я планирую отправить с моим апи-секрета, безопаснее, чем просто хэшировать секрет api, если я отправляю параметры/значения незашифрованные.

+0

Возможный дубликат [Обеспечение доступа к веб-API] (http: // stackoverflow.com/questions/3130969/secure-web-api-access) –

ответ

5

HTTPS API и используйте ключ API. Тогда вы узнаете, что только люди (вы в этом случае) с ключом могут иметь доступ к API.

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

Сценарий открытого/закрытого ключа также будет работать хорошо. HTTPS требует очень минимальных усилий.

-1

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

+1

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

2

Digital signatures Предоставить способ проверки сообщения, отправленного по небезопасному соединению.

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

Клиент подписывает запрос: вместе с остальной частью данных запроса клиент будет хэш объединенными данными запроса и шифрует хэш с помощью закрытого ключа. Сервер будет генерировать хэш таким же образом (оставив подписи из расчета хэша), а затем расшифровать подпись с помощью открытого ключа. Если хеши совпадают, запрос аутентичен.

Обратите внимание, что HTTPS разрешает сертификаты клиентов, поэтому вы можете использовать существующие инструменты для выполнения всего вышеперечисленного без написания одной строки кода на стороне сервера (вам просто нужно настроить свой веб-сервер, единственный способ - сделать убедитесь, что сервер принимает только те сертификаты, которые уже есть). Кроме того, количество клиентского кода должно быть минимальным: вам не нужно делать гораздо больше, чем устанавливать соединение для использования сертификата клиента. Поскольку вы контролируете клиентов, вы можете использовать самозаверяющие сертификаты и добавлять сервер в качестве центра сертификации. На SO есть ряд вопросов относительно использования client certificates in iPhone apps; вы можете начать с чтения через них.

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

+0

ОК, это мои вопросы, хотя, почему вы совмещаете данные и хешируете их секретом апи? отправить это, а затем отправить незашифрованные данные? как это безопаснее, чем просто хеширование тайны апи? – mkral

+2

@ mkral: Это не так, вы в замешательстве. Вы объединяете такие вещи, как префиксы и суффиксы, а также умножаете алгоритм хеширования, можете комбинировать идентификатор пользователя и имя пользователя там. Это не связано с фактическими данными, которые вы отправляете, вы отправляете их вместе со всем остальным. –

+0

Хорошо, спасибо. Так что это просто сложный хэш? – mkral

Смежные вопросы