Столкнулся с проблемой, никак не могу придумать алгоритм защиты запросов к своему пхп скрипту. Мне нужно, чтобы скрипт обрабатывал только запросы от моего приложения. Ведь зная данные пост-запросов, которые можно легко посмотреть в браузере, я смогу отправлять запросы, и таким образом накрутить себе опыта, денег и все такое. Может быть есть какое-нибудь решение для данной проблемы. Документацию про апи вконтакте читал, но некоторые вещи мне не совсем понятны. Не знаю, может дело во мне, но кажется, что новичку в этом апи трудно разобраться.
Glega, в приложении будет видно и auth_key, и любое число которое ты передашь. Ты можешь конечно сделать запутанную систему проверки, это отсеет некоторое количество ленивых школьников, но приложение всё равно останется уязвимым. В хэш md5 засовывай все переменные, которые передаются с запросом. Так ты убережешь их от подделки. Хэш, сделанный из auth_key+рандомное число, но не включающий передаваемые переменные, не защитит ровным счётом ничего. Изменение любой переменной запроса должно вызывать несоответствие в хэше.
- а вот от этого auth_key прекрасно защищает. Если ты конечно всё делаешь правильно, и каждый раз при проверке хэша собираешь его на сервере. Т.к. auth_key состоит из секретного ключа, id игрока и id приложения, злоумышленнику надо узнать все 3 эти переменные, чтобы подделать запрос для другого юзера. Оба id узнать несложно, а вот секретный ключ должен знать только ВК и твой сервер. Никогда не пиши его в приложении. Нигде.
Сильно не ругайте, потому как только начинаю работать с защитой запросов, да и вообще с самими запросами))) Исходя из комментариев, если я правильно понял, сделал так, передаю с запросом md5(auth_key + рандомное число), и само число. На сервере проверяю сходятся ли ключи. Поискал auth_key в коде страницы приложения, не нашел. Обрадовался, но потом, в хромовской панельке, где все ресурсы, обнаружил все переменные, которые контакт передает приложению, там и acces_token и secret, и т.д. Конечно, такая защита отсеет тех кто не умеет пользоваться декомпилом. Обфускация еще прибавит к ним большинство, но после обфускации приложение не хочет работать, поздно задумался о безопасности. Переделывать желания никакого нет... Конечно, основные действия проходят на сервере, но все равно злоумышленники смогут допустим какому-нибудь игроку накупить всякого хлама, или еще как-то навредить. У людей этого не отнять. Может быть я и неправильно понял советы, которые написали. У меня есть еще идея, при авторизации, сервер записывает вконтакт переменную для пользователя какой-нибудь ключ, и потом приложение считает этот ключ, и уже будет производится проверка запроса.
iDenChig, фигня в том что онлайн-декомпилом умеют пользоваться относительно немного людей. И их легко отловить по факту. Школолольники юзают артмани, и если защиту не ставить, получаешь гору подправленных запросов. А от декомпила флэху не защитить, факт. Остаётся ловить нарушителей по факту.
Ыыы защита от артмании )) Рандомную соль прибавляешь при set и отнимаешь при get. Мел просто на твоих приложениях не учили безопасников, а так с онлайн декомпилом, вообще защиту на клиенте любой сложности в гавно ))
Вообще, всё что находится в самой флэшке, защитить невозможно. Никогда не пихай туда например секретный ключ или другие подобные данные. Это всё очень легко извлечь.
Я защищаю через хэш md5, рандомное (или почти рандомное) число и статистику на сервере. И ещё для критически важных переменных (очки, деньги и т.д.) стоит защита от артмани. Реализована просто - кроме основной переменной (очки), есть дополнительная, напрмер очки+1000. Основная передаётся в запросе на сервер, дополнительная используется для формирования хэша. Если они не будут равны, хэш выйдет неверным, и сервер не примет такой запрос. В основном это помогает, но изредка защиту пробивают. Это единичные случаи, бороться бесполезно, я таких просто баню. Можно ещё отлавливать на сервере заведомо нереальные запросы. Например, мильён очков за 10 секунд и т.п.
Я по другому немного шифровал, значит на серве был скрипт который парсил данные и сами данные посылались так. Например вначале посылаем 153 очка на сервер. 153 - 3 символа, генерим 3 произвольных числа от 3 до 5 символов например 1111 222 55555, считаем сколько в кадждом числе символов и записываем их т.е 435, но перед этим записываем сколько символов в числе должно быть и получаем число 3435, затем пишем первое число и первую цифру от очков получаем, 343511111, затем пишем второе число и вторую цифру от очков и так до третьей и в итоге получаем 3435111112225555553 + рандомное число, и в итоге будет 34351111122255555532398, и хер ваще че поймешь и не подделаешь, ну а на серве скрипт просто парсит данные и проверяет на ошибки.
Просто взламывают обычно школьники, а если создать сложную подпись у них мозг разнесет нахрен от сложности, не один питух школьный не сможет даже на 1% взломать
Хотя в принципе для игр которые только счет будут сохранять можно воспользоваться так как ни кому ломать не интерестно будет, а с другой стороны если брать FunnyGame То там такая же защита и что?)) все у чертям переламали ))
Чтобы обрабатывалось только от твоего приложения еще добавь токен от самого вк, в общем в подпись впихай как можно больше данных, так будет нереально ломануть
Ну как бы это не возможно так сделать, обрабатывай все на сервере или сделай какуюнить защиту предсказаний. А вообще что отрыто и как бы ты это не зашифровывал можно всегда подделать. Самый верный способ, критические операции рассчитывать на сервере.