У нас есть PHP REST API и клиент angularjs.
У нас нет и не будет собственных клиентов, только браузер.
злоумышленник создал фальшивый веб-сайт с фальшивыми аккаунтами, осуществляя все платежи, и мы стремимся предотвратить это.
Теперь мы нашли способ запретить доступ сервера веб-сайта к нашему API, и браузер не может сделать междоменный запрос, но ничто не мешает злоумышленнику создать настольное приложение, которое обращается к нашему API.
Как определить, что клиент является браузером, а не нативным клиентом?
Я знаю, что браузеры могут быть встроены в настольные приложения, и пока я в порядке с этим, просто не чистый нативный клиент.
Единственный способ достичь этого результата — это challenge-response
Механизм с Javascript, так что «родной клиент» должен был бы проанализировать и оценить результат, что трудно без встраивания браузера или движка Javascript V8.
Просто напечатайте в JavaScript токен PHP, и тогда JS придется выполнять криптографические вычисления. Чем больше полиморфно, тем сложнее реализовать автоматизированного бота без встроенного браузера.
Однако вы не можете остановить нативное приложение с помощью интерпретатора JavaScript, такого как движок V8, от Google (который имеет большой размер, но очень быстрый).
Других решений пока нет …