Проверить запрос к серверу. Пропустить, если он пришёл от мобильного приложения

Есть мобильное приложение, из которого посредством GET-запроса отправляются данные серверному скрипту (скрипт на php), который обрабатывает их и отправляет в базу данных MySQL. На данный момент, зная ссылку этого запроса, можно просто ввести её в строку браузера и отправить в базу данных какую угодно некорректную информацию. Как мне сделать так, чтобы сервер принимал и добавлял в базу данных только ту информацию, которая отправляется моим мобильным приложением?


Ответы (2 шт):

Автор решения: ЮрийСПб

Чисто технически невозможно создать такой запрос, который невозможно повторить. Можно лишь усложнять его воспроизведение, хотя это и бессмысленно в общем-то, т.к. повторить всё равно можно. Возможно, вам стоит несколько изменить ТЗ. Если надо, например, только убрать возможность простого вызова из браузера, то сделайте Post запрос вместо Get - браузер умеет только get запрос делать (если имеется в виду вставка и переход по ссылке из адресной строки)

→ Ссылка
Автор решения: Arsen

Для того чтобы защитить / проверить запросы которые идут на ваш сервер через API есть несколько методов (более детально изучаем книги и документации...) Один из важных моментов, ваши запросы должны работать по https

HTTP Authentication

а. Basic Authentication - самый простой метод, есть много дискуссии на счёт использования данного метода(есть пару проблем с уязвимостью) однако, лучше чем ничего :) При использовании этого метода отправитель помещает имя пользователя и пароль в заголовок запроса. Имя пользователя и пароль кодируются с помощью Base64.

б. Bearer Authentication - авторизация происходит по токену который генерируется вашей системой(backend) и все запросы должны иметь данный токен.

в. REST API Security на серверной части создаёте уникальный ключ по которому будет работать приложение с бекендом. Обратите внимание, лучший вариант - поместить ключ API в заголовок авторизации вместо отправки в виде параметров(GET/POST)

Есть ещё методы, однако, думаю Bearer Authentication или REST API Security полностью решат вашу проблему.

→ Ссылка