Задать вопрос
@skippetr

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

Есть клиент-серверное приложение. Есть один api метод (скажем https://example.com/api/test?q=123), который отправляется клиентом, но только тогда, когда соблюдены некоторые условия. Например, какой-то любознательный хацкер изучит этот метод и будет слать такой api запрос, когда условия на клиенте не соблюдены. Можно ли как-то зашифровать этот запрос, чтобы на сервере можно было проверить его валидность и в то же время клиент мог сформировать этот запрос только при соблюдении условий?
Не знаю на сколько понятно описал, я честно старался.
  • Вопрос задан
  • 1023 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 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, само собой).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы