Как безопасно передавать результаты из приложения, которое использует только логин на Facebook?

Наше приложение для Android только есть логин на Facebook.

Вот что происходит на сервере:

Пользователь создается при отправке запроса POST с помощью маркера доступа Facebook в теле.

Всякий раз, когда пользователь создается с помощью запроса POST, генерируется токен API и отправляется как ответ следующим образом:

{"message":"User Successfully Created","api_token":"ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo"}

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

Теперь, если пользователь уже существует на сервере, ответ будет

{"message":"User Already Exists!!","api_token":"ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo"}

Это в случае, если пользователь удаляет приложение и устанавливает снова.

Теперь для отправки оценки необходимо отправить запрос PATCH с:

Заголовки:

Content-Type:application/x-www-form-urlencoded
api_token:ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo
fb_id:xxxxxxxxxx

Тело:

distance:2
golds:19
xp:23

(Примечание: я протестировал вышеуказанный запрос, используя почтальон)

Теперь проблема в том, что я заметил лазейку.

Человек может в любое время узнать свой токен доступа к Facebook и свой идентификатор Facebook. Поэтому, если они сделают запрос POST с этим токеном доступа пользователя, они получат api_token (в ответе «Пользователь уже существует!»). И как только у них есть api_token и fb_id, они могут сделать запрос PATCH, чтобы изменить их результаты в соответствии с их желаниями.

Что я делаю неправильно? Как я могу защитить свой сервер от взлома таким образом?

Пожалуйста, помогите мне. Я новичок в разработке API.

Спасибо

1

Решение

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

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

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

Новый пользователь, сервер md5 хеширует свой API-ключ и отправляет его на хранение.
Существующий пользователь, сервер md5 хеширует свой ключ API и отправляет его на хранение (при необходимости).
Произошло официальное изменение существующей оценки: приложение re-md5 хэширует уже хешированный ключ API и отправляет его с запросом PATCH. Сервер имеет базу данных с дважды хешированными API-ключами, которые он находит ваш и идентифицирует как пользователя, и с этого момента все происходит нормально.

0

Другие решения

Других решений пока нет …