Лучший способ безопасного размещения данных на URL из Java - PullRequest
4 голосов
/ 14 января 2011

Я разрабатываю небольшую игру (на Java) для курсовой работы, и расширением, которое я решил сделать, является онлайн-табло.Я подумал, что это может произойти, несколько человек на моем курсе выяснили, как взломать табло и представить свои собственные результаты.

Я знаю, что в текущем способе представления результатов есть несколько проблем, но здесьэто.Игра генерирует счет, а затем выполняет HTTP GET для URL с параметрами идентификатора игрока, счета и пароля.

Я мог бы изменить это на POST, поскольку было бы сложнее получить данные для пароля.Кроме того, я рассматриваю возможность запуска по HTTPS (хотя я не знаю, является ли это более сложным в Java).К сожалению, это не останавливает основной способ, которым люди находят пароль путем декомпиляции кода Java.

Я не знаю лучшего способа предотвратить взлом.Я на самом деле не против, это не так важно, но было бы неплохо обезопасить его, чтобы, когда код помечен, на нем не было спама.

Каким будет вашпредложения о том, как запутать код и / или обезопасить весь процесс?

Ответы [ 3 ]

7 голосов
/ 14 января 2011

Ваш подход просто не работает. Когда вам нужно что-то защитить, вы не можете запустить это на клиенте.

Вместо этого вся игра должна запускаться на сервере, и пользователи могут отправлять только ходы. Таким образом, вы можете проверить ходы (чтобы игроки не могли создавать недопустимые состояния) и рассчитать правильный счет.

Все остальное всегда можно взломать. Если вы не шифруете данные, их можно взломать с помощью сетевого анализатора. Если вы используете HTTPS, хакеры могут использовать прокси для декодирования данных ( человек в середине атаки ).

2 голосов
/ 14 января 2011

Запутывание не поможет вам. Это только усложнит хакерам, но, безусловно, все еще возможно.

Чтобы обезопасить весь процесс (хотя бы до некоторой степени), на клиенте не должно быть никакого игрового логического кода. Клиент должен отправлять только игровые команды на сервер. После получения команд сервер должен проверить, может ли пользователь выполнить заданные команды.

Так, например, даже если ваши коллеги отправят команду «установить оценку Джеффа 9999», сервер проверит, действительно ли Джефф сыграл в игру, которая дала ему 9999 баллов, если нет, вы можете просто показать сообщение об ошибке на клиент.

Общее правило: если на клиенте что-то есть, клиент может его изменить. Большинство людей допускают попытки помешать клиенту бесполезно изменить его, так как это только вопрос времени.

2 голосов
/ 14 января 2011

Что можно сделать, это перейти от анонимного отслеживания на основе пользователя.Это не предотвращает подделку, но делает ее более отслеживаемой.

Основной протокол может заключаться в том, что изменение табло подписывается или шифруется с использованием ключа сеанса.Ключ сеанса создается при входе в систему самого игрока.Здесь вы можете работать, используя соответствующую систему аутентификации.

Теперь, по крайней мере, вы знаете, с какого аккаунта было сделано изменение, и можете обвинить вашего ученика ...

...