Подтвердить что ты не робот

Самый надежный способ обновить игровой счет от базы данных от клиента к серверу? Javascript

Итак, у меня есть эта игра, которая полностью запущена на клиенте. Нет взаимодействия с сервером, что никогда не было, кроме загрузки исходных скриптов для игры. Во всяком случае, в конце игры я бы хотел, чтобы клиент отправил мне оценки, которые должны быть обновлены в базе данных сервера. Теперь я пришел, чтобы принять тот факт, что на земле я не могу скрыть это от хакера и отправить оценки без изменений. Но я хотел бы знать, до какого уровня я могу изменить весь процесс, который практически становится недопустимым для хакера, манипулирующего передаваемыми данными. Конечно, мне не хотелось бы, чтобы оценка была отправлена ​​как обычный текст с клиентского компьютера, и я не хочу, чтобы мой сервер выполнял сложный алгоритм дешифрования. Каким образом наилучшим способом добиться значительного уровня безопасности, чтобы каждый член и Харри не взламывали оценки... Надеюсь, кто-то может обеспечить хороший маленький способ, которым я мог бы работать...:) Спасибо

Таким образом, мой идеальный результат должен быть → иметь верный результат из расчета (оценки), сделанного ненадежной стороной (игроком)!

-Edit -

Кто-то сказал мне что-то о том, чтобы скрыть данные в запросе получения изображения. Например, я реализую эту игру на холсте (html5). Поэтому он попросил меня в конце игры получить игру с изображением с моего сервера, и они должны содержать хэшированный балл. Я не совсем понял весь процесс, но если бы вы могли это объяснить, было бы действительно рад!:)

coda ^, чтобы вы могли легко маскировать запросы

shouvik как это сделать??

coda ^ вы можете составить контрольную сумму, которую хотите отправить. например, 12312312a12313a232 - это ваш md5, который содержит оценку. принесите актив в холст, например

coda ^ server.com/images/md5_hash_of_score/congratulations.png

coda ^, которую вы можете переписать на стороне сервера через htaccess

4b9b3361

Ответ 1

"Теперь я пришел, чтобы принять тот факт, что на земле я не могу скрыть это от хакера и отправить оценки без изменений".

О да, есть!

Вы можете использовать RSA или любой другой метод шифрования с открытым ключом (также называемый ассиметричной криптографией).

Создайте набор (открытых и закрытых) ключей для сервера. Введите код вашего клиента в общий открытый ключ вашего сервера.

В конце игры клиентский код зашифровывает счет (с помощью этого ключа) и отправляет на сервер (как простой, так и зашифрованный балл).

Сервер расшифровывает и проверяет, одинаковы ли простые и дешифрованные. Если да, примите оценку. Если нет, отклоните (там хакер или сетевая ошибка посередине). Забастовкa >

------- UPDATE ----------- CORRECTION --------------

Как отметила Амброзия, мой подход полностью не справляется с такой атакой.

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

Смотрите это: http://coltrane.wiwi.hu-berlin.de/~fis/texts/2003-profit-untrust.pdf

Также этот: http://www.cse.psu.edu/~snarayan/publications/securecomputation.pdf

И это (которому нужна подписка на цифровую библиотеку ACM): http://portal.acm.org/citation.cfm?id=643477.643479

Ответ 2

Вы, кажется, уже знаете это, но просто для того, чтобы подчеркнуть; вы не можете остановить этого; вы можете сделать это как можно сильнее!

Предположим, что вы в настоящее время отправляете баллы как:

/submit_score.php?score=5

Кто-то, смотрящий в Firebug, может легко отличить, где представлен счет, и изменить его. submit_score.php отдает его, как и имя параметра. Оценка - это легко различимое целое число.

  • Изменить конечную точку: /interaction.php?score=5
  • Измените имя параметра: /interaction.php?a=5

Все труднее для пользователя выработать то, что происходит.

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

  • База 64 кодирует его.
  • Числа → Буквы (1 = a, 2 = b и т.д.).
  • Обратный порядок представления оценки.

Вы называете это, вы это делаете. Итак, теперь у вас interaction.php?a=e.

Следующее, что вы можете сделать, это хэш-счет с чем-то другим. Отправьте хэш со счетом и пересчитайте его на сервере. Например, md5() оценка со случайной строкой и отправить в запросе счет (закодированный), строку и хеш:

/interaction.php?a=e&str=abcde&hash=123456789abcefbc

Когда запрос попадает на сервер, выполните:

if (md5($_GET['a'] . $_GET['str']) !== $_GET['hash']) exit;

Очевидно, люди могут (относительно) легко пройти через ваш код JavaScript и посмотреть, что происходит; поэтому сделать их труднее для них. Минимизировать и обфускать код.

Если вы сделаете это достаточно сложно для кого-то, они попытаются понять ваш JavaScript, попробуйте использовать Firebug, не понимая, что происходит, и не беспокойтесь; ради получения нескольких дополнительных очков в вашей игре.

Ответ 3

Можете ли вы использовать ajax для отправки счета (и любых идентификаторов) на сервер? Если у них нет что-то вроде firebug open, они не видят, что это происходит.

var url = '/savescores.asp?userID=fredsmith&score=1098';
createRequest();
request.open('GET', url, true);
etc

Ответ 4

Заставьте клиента отправить вам учетные данные (или какую-либо информацию о сеансе, если у вас нет учетных данных для входа в систему) и выполните это через SSL (https). Таким образом, у вас есть аутентификация и контроль целостности. Очень легкий и чрезвычайно легкий как для сервера, так и для клиента.