2012-02-17 3 views
0

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

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

ответ

1

Вы можете использовать контрольную сумму. Допустим, что у вас есть что-то вроде: даты предмета

и вычислить контрольную сумму, используя, скажем, MD5 от (дата + «строка» + предмет), и рассчитать MD5 в той же образом на сервер. Если они совпадают, они связаны с мобильным клиентом.

Это будет работать, пока кто-то не выяснит ваш алгоритм.

+0

Хм, это может сработать. Дата должна быть точной только на день или около того, хотя в противном случае они никогда не будут соответствовать, потому что вы не знаете, сколько времени потребуется на этот запрос. – joshholat

+0

Не забывайте, что вам, возможно, придется учитывать разные часовые пояса, которые могут давать разные дни. Probalby лучше всего использовать UTC. –

0

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

Ваше приложение затем выполняет какой-то алгоритм в этом сообщении, чтобы «зашифровать» его и отправить обратно на сервер, и сервер может проверить его. Таким образом, нечего перехватывать и использовать, не зная своего «шифрования».

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

+0

Это действительный способ обойти это, но запросы поступают из приложений. Чтобы сделать это таким образом, я должен был попросить приложение запросить код, сделать что-то с ответом, а затем сделать еще один запрос на сервер, который, вероятно, является большим количеством ненужной связи. Это, вероятно, было бы лучше, если бы я нуждался в этом, чтобы быть более безопасным, чем ответ Зыберзеро. – joshholat

0

Вы можете просто использовать HTTP-аутентификацию по умолчанию, если вам не требуется что-то более безопасное.

+0

Из-за того, что я пытаюсь сделать, это немного сложнее. Все запросы аутентифицируются одинаково, но мне также необходимо определить, откуда идет запрос, если это имеет смысл. – joshholat

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