Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Безопасность. Как обезопасить приложение. (http://www.flasher.ru/forum/showthread.php?t=152616)

aaanet 20.03.2011 16:13

Безопасность. Как обезопасить приложение.
 
Доброго времени суток!

Поиском пользовался, ничего более-менее 100%го не находил.
Столкнулся с созданием приложения ВКонтакте.
Более-менее всё понятно, особых вопросов нету, кроме... безопасности.

Если:
1. Проверять auth_key.
2. Обфусцировать приложение.
3. Слать "левые"/шифрованные, хотябы md5 запросы.
4. Запутывать эти самые запросы.

Всё это конечно хорошо, но это избавит от школьников, не более того. Эти запросы легко дублировать. Кстати, что делать против дублирования?

Какие еще способы обезопасить приложение есть?

Спасибо!

Astraport 20.03.2011 16:28

Недавно давали код как принимать запросы на сервере только по определенным IP.

etc 20.03.2011 16:29

От дублирования в каком смысле?

aaanet 20.03.2011 17:11

Цитата:

Сообщение от etc (Сообщение 982110)
От дублирования в каком смысле?

К примеру, посылаем запрос на php скрипт. Который в свою очередь проверяет auth_key и еще несколько зашифрованных параметров. И, к примеру, php скрипт отвечает за добавления очков в БД. Но, ведь можно все эти запросы послать по несколько раз. И прибавиться N'ое количество очков.

Цитата:

Сообщение от Astraport (Сообщение 982110)
Недавно давали код как принимать запросы на сервере только по определенным IP.
?

На сколько мне известно, контакт не разрешает собирать у юзеров такие данные, как IP, могу конечно ошибаться.
Но в любом случае, от дублирования не спастись таким способом, но всё же.

etc 20.03.2011 17:21

Цитата:

Сообщение от aaanet (Сообщение 982131)
К примеру, посылаем запрос на php скрипт. Который в свою очередь проверяет auth_key и еще несколько зашифрованных параметров. И, к примеру, php скрипт отвечает за добавления очков в БД. Но, ведь можно все эти запросы послать по несколько раз. И прибавиться N'ое количество очков.

Это значит, что у вас криво написан сервер, который не запрещает повторную отправку. Правьте сервер.

goodguy 20.03.2011 17:24

Тоже заинтересовал этот вопрос.
Цитата:

Это значит, что у вас криво написан сервер, который не запрещает повторную отправку.
Ну а если сделать, чтобы запрещал, то как само приложение сможет отправить еще один, реальный, запрос?
Как такое лучше реализовать?

aaanet 20.03.2011 17:25

Цитата:

Сообщение от etc (Сообщение 982134)
Это значит, что у вас криво написан сервер, который не запрещает повторную отправку. Правьте сервер.

Подскажите, как?
Ведь можно этот же запрос повторить, к примеру, через 10 минут, или через 1 час.

etc 20.03.2011 17:25

Цитата:

Сообщение от aaanet (Сообщение 982136)
Подскажите, как?
Ведь можно этот же запрос повторить, к примеру, через 10 минут, или через 1 час.

Заводите сессию, убивайте после получения очков, хотя бы.

aaanet 20.03.2011 17:30

Цитата:

Сообщение от etc (Сообщение 982137)
Заводите сессию, убивайте после получения очков, хотя бы.

Ну сессия в PHP. А тут снова такой же запрос, и в этом запросе всё как и от самого приложения. И снова в php создастся сессия, добавяться очки и сессия завершится. Тоже по-моему дублировать без проблем можно.

etc 20.03.2011 17:32

aaanet, id-сессии использовать в качестве ключа для запроса нужно. Хотя бы.

GBee 20.03.2011 17:36

по идее логика начисления очков должна быть на сервере вообще.

aaanet 20.03.2011 17:39

etc, простите, а можно чуть подробнее?

с приложения отправляю запрос в php при получении запроса открываю сессию, делаю подсчеты, работаю с базой, убиваю сессию.

Добавлено через 3 минуты
Цитата:

Сообщение от GBee (Сообщение 982145)
по идее логика начисления очков должна быть на сервере вообще.

Разумеется.
Вопрос в другом.

1. Как сделать так, чтобы запросы с приложения к серверному скрипту нельзя было повторять. (А то запустят запрос на добавление очков 100 раз и всё)

2. В любом случае какие-то параметры должны передаваться, тот же ID, его же можно тоже подменить и другому юзеру прибавить/отнять очки. Шифровать ID конечно хорошо, но декомпиляция решает эти проблемы.

udaaff 20.03.2011 17:52

Цитата:

Сообщение от aaanet (Сообщение 982148)
1. Как сделать так, чтобы запросы с приложения к серверному скрипту нельзя было повторять. (А то запустят запрос на добавление очков 100 раз и всё)

Если у вас логика на клиенте находится, то можно только попытаться усложнить жизнь читеру.

Цитата:

Сообщение от aaanet (Сообщение 982148)
2. В любом случае какие-то параметры должны передаваться, тот же ID, его же можно тоже подменить и другому юзеру прибавить/отнять очки. Шифровать ID конечно хорошо, но декомпиляция решает эти проблемы.

auth_key для этого существует.

etc 20.03.2011 17:58

aaanet, перед началом игры получить у сервера id сессии, по окончании отправить запрос с очками, подписав запрос с использованием этого id. Сервер зачисляет и удаляет сессию. Следующий подобный запрос уже не будет работать.

Это в общих чертах, так сказать.

aaanet 20.03.2011 18:08

Цитата:

Сообщение от udaaff (Сообщение 982156)
Если у вас логика на клиенте находится, то можно только попытаться усложнить жизнь читеру.


auth_key для этого существует.

Логика "шифрования" на клиенте. Декомпиляция всё решает. Максимум усложнять. А логика подсчетов, работы с БД и т.д. на сервере.

auth_key, поможет от школьников отбится.
Но посчитать md5(viewer_id, app_id, api_secret) с подменнённым viewer_id могут многие. И очки прибавяться/отнимуться другому пользователю.

udaaff 20.03.2011 18:13

Цитата:

Сообщение от aaanet (Сообщение 982165)
Но посчитать md5(viewer_id, app_id, api_secret) с подменнённым viewer_id могут многие. И очки прибавяться/отнимуться другому пользователю.

Это в том случае, если у вас хватит мозгов во флешку защищенный ключ засунуть.

aaanet 20.03.2011 18:13

Цитата:

Сообщение от etc (Сообщение 982159)
aaanet, перед началом игры получить у сервера id сессии, по окончании отправить запрос с очками, подписав запрос с использованием этого id. Сервер зачисляет и удаляет сессию. Следующий подобный запрос уже не будет работать.

Это в общих чертах, так сказать.

В принципи, понял.
Но хотел сделать уйму php скриптов, чтобы каждый отвечал за свои функции, к примеру.
score1.php отвечает за прибавление очков за задание 1
score2.php отвечает за прибавление очков за задание 2
и т.д.

Чтобы как можно меньше данных в запросах приходилось слать. Обезопасить себя от подмены.

Так с сессиями, как Вы написали, будет проблематично. Или всё таки возможно сделать чтобы сессия распространялась сразу на несколько php скриптов?

Добавлено через 1 минуту
Цитата:

Сообщение от udaaff (Сообщение 982166)
Это в том случае, если у вас хватит мозгов во флешку защищенный ключ засунуть.

Не подумал. И правда ведь. Спасибо!
-1 проблема)))

Причем из-за дикой невнимательности.

Добавлено через 25 часов 27 минут
хм. всё равно, не понятен режим открытия/закрытия сессии.

к примеру, есть 2 php файла, один отвечает за сессию - session.php, другой отвечает за добавление в БД очков за задание - score1.php

т.е.
1. заходим в приложение. обращение к session.php сессия открывается.
2. выполняем задание. запрос к score1.php. очки прибавляются. обращение к session.php. сессия закрывается. дублировать запрос к php уже не получится. сессия закрыта.

чтобы выполнить задание еще раз.
1. обращение к session.php. сессия открыта.
2. выполняем задание. запрос к score1.php. очки прибавляются.
3. обращение к session.php. сессия закрывается.

так?


Часовой пояс GMT +4, время: 23:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.