@skippetr

Как зашифровать api вызов, чтобы клиент не смог его прочитать?

Есть клиент-серверное приложение. Есть один api метод (скажем https://example.com/api/test?q=123), который отправляется клиентом, но только тогда, когда соблюдены некоторые условия. Например, какой-то любознательный хацкер изучит этот метод и будет слать такой api запрос, когда условия на клиенте не соблюдены. Можно ли как-то зашифровать этот запрос, чтобы на сервере можно было проверить его валидность и в то же время клиент мог сформировать этот запрос только при соблюдении условий?
Не знаю на сколько понятно описал, я честно старался.
  • Вопрос задан
  • 959 просмотров
Пригласить эксперта
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А что помешает хакеру изучить метод шифрования и зашифровать свой запрос?
Всё, что присылает клиент, должно проверяться на сервере, в том числе и условия допустимости запроса.
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Общайтесь с сервером по самописному бинарному протоколу завернув это все дело в websoket
Ответ написан
Комментировать
Сделай систему токенов, привязанных к клиенту определенному. Самое просто решение валидации запроса за 5 минут:
1) Придумываешь секретное слово
2) Хэшируешь его и запрос из клиента:
$keyword = 'шифровочка';
$q = '123';
$hash = md5($keyword.$q); //089580e98caf60967d356e5cc3b32046

3) Шлешь запрос: https://example.com/api/test?q=123&hash=089580e98c...
4) Сверяешь его на сервере по такому же слову и если все ОК - пропускаешь
if(md5($keyword.$_GET['q']) == $_GET['hash']) echo 'OK';

Это все очень грубо, есть куча готовых решений и алгоритмов. Можешь посмотреть пример OAuth.
Ответ написан
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Клиент - в руках врага.
Вы ничего не можете сделать с этим. Всё, что вам остаётся - контролировать состояние на стороне сервера и уже там проверять, соблюдены ли условия. На стороне же клиента все эти проверки можете считать валидацией для удобства пользователя - не более.
Никакое шифрование вам не поможет (это не значит, что API должно работать по открытому HTTP, само собой).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы