Есть клиентское приложение и конечно со стороны сервера есть ответчик на запросы.
Как можно защитить сервер от запросов вне клиента - к примеру кто-то решил отследить запрос через клиентское приложение и напрямую решил общаться с сервером.
Проверка user-agent ? Можно подменить
И все остальное вроде можно отследить(запрос который отсылается к серверу).
К примеру если я хочу сделать возможность приложению напрямую добавлять данные на сервер(без капчи), злой дядя может отследить какой запрос идет и на основании этого сделать подобные запросы уже напрямую(referer также можно подменить).
У кого есть опыт делитесь )
p.s. в гугл искал, либо плохо искал, либо именно для моего варианта вопроса нет ответа
p.s.s. ВАРИАНТ БЕЗ АВТОРИЗАЦИИ/РЕГИСТРАЦИИ - или такого варианта нет?
В программе пишешь алгоритм по-которому генеришь id пользователя. Этот Id вставляешь в запросы. На сервере проверяешь Id , если сгенерирован верно, возвращаешь ответ. Если нет, тролишь.
String uniqueID = UUID.randomUUID().toString().toUpperCase();
этот id заворачиваешь, к примеру, в SHA-1
потом делаешь контрольную сумму с полученной последовательности
и присоединяешь контрольную сумму к id
готово
на сервере отделяешь id от контрольной суммы и проверяешь
тоже можно по-подробнее? ибо работать с ними приходилось, а вот реализовывать нет.
как я понял - отправляем один запрос, сервер на основании чего-либо(ip+ua или еще что-то) генерирует токен и при следующих запросах сверяет данные, да?
и если да, то тоже можно по-подробнее, что-то типа бест практики )
IceJOKER: ну как обычно это происходит, когда клиентом выступает браузер? Пользователь авторизуется и получает печеньки в ответе сервера. Обычно это id и ключ (токен), но можно генерировать только ключ. При каждом следующем запросе браузер отсылает печеньки, сервер получает их и ищет пользователя с таким ключём в БД.
Здесь тоже самое, только нужно проделать работу браузера самостоятельно. Не забудь использовать HTTPS для общения с сервером.
О лучших практиках можешь почитать в Сети, теперь ты знаешь по какому запросу их искать.
IceJOKER: используй фантазию. Узнавай номер телефона пользователя, шли СМС с кодом и сам же проверяй его из сообщений. Вот и авторизация, никому ненужно ничего вводить.
FoxInSox: к примеру хочу android приложению дать возможность без капчи добавить данные, а на сайте с капчой.
или хочу дать возможность приложению получить доступ к api, а вне приложения запретить такой доступ.
вот и подумал, может есть способ..
FoxInSox: пока приложения нет, хотелось бы написать вот и подумал, может есть какой-нибудь вариант для реализации этого.
чтоб доступ к серверу был доступен только через приложения, но никак не напрямую
IceJOKER: А что мешает "плохому дяде" скачать приложение и менять эти данные? Зачем ему заморачиваться и прослушивать сеть если ваше приложение он может скачать и его никто не запалит?)
Алексей: на стороне клиента ставить ограничения можно запросто, т.к. я имею полный доступ к клиентской части, а вот к серверной части лишь небольшой доступ(просто так вышло..).
на клиентской части - к примеру после отправки запроса в приложении записать время и в зависимости от времени разрешать или запрещать отправку еще данных.
IceJOKER: у меня в голове все нормально, наверно объясняю плохо )
есть программа(не важно пк или мобайл) и есть сайт - вопрос мой заключался в том, можно ли организовать доступ клиента к серверу таким образом, чтоб только и только программа(клиент) мог обращаться к серверу. то есть, чтоб тот кто отследил какой запрос отправляется на сервер, не смог его напрямую туда отправлять. без авторизации/регистрации.
то есть можно ли сделать так, чтобы на сервере можно было опознать, что это клиент отправил запрос(опять же без токена и т.д.) или какой-то чувак решил напрямую не из программы отправлять запрос.
я уже не знаю как еще объяснить .