Проверить запрос к серверу. Пропустить, если он пришёл от мобильного приложения
Есть мобильное приложение, из которого посредством GET-запроса отправляются данные серверному скрипту (скрипт на php), который обрабатывает их и отправляет в базу данных MySQL. На данный момент, зная ссылку этого запроса, можно просто ввести её в строку браузера и отправить в базу данных какую угодно некорректную информацию. Как мне сделать так, чтобы сервер принимал и добавлял в базу данных только ту информацию, которая отправляется моим мобильным приложением?
Ответы (2 шт):
Чисто технически невозможно создать такой запрос, который невозможно повторить. Можно лишь усложнять его воспроизведение, хотя это и бессмысленно в общем-то, т.к. повторить всё равно можно. Возможно, вам стоит несколько изменить ТЗ. Если надо, например, только убрать возможность простого вызова из браузера, то сделайте Post запрос вместо Get - браузер умеет только get запрос делать (если имеется в виду вставка и переход по ссылке из адресной строки)
Для того чтобы защитить / проверить запросы которые идут на ваш сервер через API есть несколько методов (более детально изучаем книги и документации...) Один из важных моментов, ваши запросы должны работать по https
HTTP Authentication
а. Basic Authentication - самый простой метод, есть много дискуссии на счёт использования данного метода(есть пару проблем с уязвимостью) однако, лучше чем ничего :)
При использовании этого метода отправитель помещает имя пользователя и пароль в заголовок запроса. Имя пользователя и пароль кодируются с помощью Base64.
б. Bearer Authentication - авторизация происходит по токену который генерируется вашей системой(backend) и все запросы должны иметь данный токен.
в. REST API Security на серверной части создаёте уникальный ключ по которому будет работать приложение с бекендом. Обратите внимание, лучший вариант - поместить ключ API в заголовок авторизации вместо отправки в виде параметров(GET/POST)
Есть ещё методы, однако, думаю Bearer Authentication или REST API Security полностью решат вашу проблему.