Серверная сторона highscores для записанной из JavaScript игры

Я реализую простую игру в JavaScript и интересуюсь наличием highscores таблицы онлайн для него, так, чтобы плееры могли конкурировать друг против друга. У меня есть два опасений по поводу этого:

  1. Какова самая простая программа серверной стороны, в которой я нуждаюсь с этой целью? Мне не нужно законченное "веб-приложение", просто что-то простое, которое получает запросы POST с highscores, обновляет базу данных и отправляет имеющиеся в продаже книги очков. Я знаком с Django. Каковы Ваши предложения?
  2. Как я могу сделать highscores таблицу довольно безопасной? Я знаю, что создание его пуленепробиваемый против компетентных и преданных хакеров является трудным, но я не хотел бы, чтобы любой с доступом к исходному коду JavaScript смог отправить фиктивные очки слишком просто. Какие-либо инструменты с этой целью?
6
задан Eli Bendersky 19 February 2010 в 15:58
поделиться

3 ответа

1.) Любой сценарий CGI, который может взаимодействовать с базой данных и понимать JSON или другой формат по вашему выбору, выполнит эту работу.

Однако, если вы знакомы с Django, создание вашего сервера на основе Django было бы наиболее простым с точки зрения того, что вам нужно изучить и сколько кода приложения вы должны написать. Казалось бы, простой CGI-скрипт может оказаться довольно сложным, если вы напишете его с нуля.

Я обнаружил, что django-поршень - удобное приложение Django для быстрого написания сервера API в стиле REST. Он поддерживает JSON, поэтому он должен легко взаимодействовать с вашей игрой на JavaScript.

2.) Самый случайный взломщик будет использовать атаку повторного воспроизведения и ее варианты: заглянуть в источник страницы и выполнить функцию JavaScript, перехватить HTTP-запросы и повторно отправить их (должно быть легко с Firefox надстройка, такая как Tamper Data).

Чтобы противодействовать первому, вы можете скрыть исходный код и тело HTTP;

  • Сократите код JavaScript
  • Закодируйте сообщение, которое вы отправляете на сервер, с помощью Base64 или другого алгоритма кодирования

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

1
ответ дан 10 December 2019 в 02:46
поделиться

4 guysfromrolla.com содержит статью , в которой создается пользовательский серверный элемент управления для сохранения положения прокрутки между обратными пересечениями. Может, тебе это пригодится.

-121--4952469-

Это выглядит разумно ожидаемым для меня.

При вызове Thread.Sleep между «Created» и «Starting» появится строка «Calculing», показывающая, что он выполняет работу во время работы основного потока. Это путь, в котором она асинхронна.

Если вы обеспокоены тем, что First () возвращает само значение, а не дает своего рода «будущее» значение, вы можете проконсультироваться позже, это другой вопрос - и у меня есть две записи в блоге для вас читать: часть 1 ; часть 2 . Я думаю, вы хотите метод Prune , но я не совсем уверен.

-121--5085930-

Будет довольно трудно обеспечить высокие баллы. Я имею в виду, это недостаточно, чтобы убедиться, что он приходит с вашей страницы, потому что если, скажем, JavaScript функция submitHighScore (n) , то они всегда могут ввести javascript: submitHighScore (10000000) в адресной строке на этой странице и работать.

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

Другой вариант будет для игры, чтобы вытащить какой-то ключ, который работает только временно, так что, как вы пошли вдоль ключа будет меняться, а затем оценка будет передаваться на центральный сервер с перерывами.

Имейте в виду, что действительно определенные лица всегда могут просто трек данные, отправляемые в ваши данные, и декомпилировать их.

Вы могли бы пойти по маршруту Бродербунда и задать игроку тривиальные вопросы, которые проверены на стороне сервера, чтобы убедиться, что они действительно прошли уровень, который, по их словам, они сделали... что-то вроде «Какого цвета был монстр на предыдущем уровне?»

5
ответ дан 10 December 2019 в 02:46
поделиться

В ответ на ваш вопрос:

1.) Это зависит от вашей среды и предпочтений в кодировании. PHP, Python, ASP.NET - вот несколько вариантов, которые приходят на ум. Если вы уже знаете Python (из вашего профиля), вы можете использовать Python CGI скрипт для этого или использовать один из многих фреймворков для Python (Zope, Django, Pylons,...).

см: http://www.python.org/doc/essays/ppt/sd99east/index.htm для информации о Python CGI.

2.) Несколько трюков для безопасности:

  • Скрытое текстовое поле в HTML с закодированным значением, которое сервер проверяет на соответствие cookie, чтобы убедиться, что высокий балл пришел с вашей страницы.
  • Серверный скрипт принимает значения только из определенного домена
0
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: