Подлый: Проверка подлинности сгенерированного пользователем контента в игровой ситуации не легка.Я рекомендую запутывать команды с помощью тарабарщины, передаваемой между JavaScript и сервером.Например, если вы отправите координату x пользователя на сервер вместо:
ajax.send('userXLocation=80');
Попробуйте что-нибудь непонятное по-английски:
ajax.send('J{};;%FI=80');
Не пуленепробиваемый, конечно,но с некоторыми хорошими JS-минимизацией / запутыванием пользователи будут иметь проблемы с дифференцированием отправленных команд, если все, что они смогут понять, это число.В вашем JS-коде тарабарщина должна быть жестко закодирована, но в PHP у вас может быть массив, который отображает бред на действительные команды.
Extra sneaky: Вместо тарабарщины,в качестве команд использовали фиксированные числа с предварительной записью.Пользователь X может перейти на 80: 24080
Подлый: Вы также можете иногда пытаться отправить уникальный идентификатор сеанса (аналогично полуоткрытому ключу) и дать команду JS.закодировать все сообщения, используя этот идентификатор сеанса.Это снова может быть взломано, но это добавит время к любой попытке взлома.
Extra sneaky: Этот идентификатор сеанса может быть текстом последнего ответа сервера, поэтому при каждом запросеизменится, но не будет никакого очевидного сообщения, которое хакер мог бы увидеть, сообщая JS, что ключ изменился.Это было бы просто невинное общение между JS и PHP.
Sneaky: Это еще одно временное решение, но для запутывания чисел вы можете выбрать постоянную (возможно, одну уникальную длясеанс), чтобы добавить или вычесть каждый номер перед отправкой.Поэтому, если хакер знал, что он находится в позиции X 80 и искал сообщения, содержащие 80, он / она не видел бы ни одного, потому что JS и PHP уже решили добавить 5 к каждому номеру.85 сможет проходить через незамеченным.
Super Sneaky: Как и выше, вместо того, чтобы соглашаться с константой запутывания чисел, используйте номер, последний отправленный в JS сервером.Снова хакер будет озадачен, почему числа продолжают меняться, но нет сообщений, информирующих JS об изменении его номеров.
Sneaky: Снова временный, но при запутывании кода попробуйте смешать- в логике с базовым материалом (создание объекта ajax), поэтому даже при красивой печати для хакеров Chrome ваш код будет трудно расшифровать.Что-то еще, чтобы рассмотреть, возможно, полностью отказывается от размещения переменных в посте.Это не продлится долго, но было бы подлым передавать команды через куки (которые будут отправляться с запросами ajax).Чтобы быть более подлым, вы могли бы сделать так, чтобы PHP и JavaScript решали, когда переключаться между сообщениями сообщений и файлов cookie или использовать сообщения только для нечувствительных вещей.
Super sneaky: Put coreЛогика игры и общение в файле под названием jquery-1.6.2.min.js
.Я гарантирую, что большинство тех, кто пытается взломать ваш скрипт, проигнорируют его.
Достойный ниндзя: Если вы решите чередовать запросы cookie и публикации, создайте приманку на транспорте, который не используется.Итак, после того, как PHP отправит ответ и скажет: «Эй, давайте перейдем к куки!»и JavaScript говорит: «Конечно», PHP должен прислушиваться к попыткам связи через POST.Следует предположить, что, поскольку JS связывается с помощью cookie (на данный момент), при попытке отправки почтового запроса произошел некоторый взлом.Затем он должен напугать пользователя сообщением «Ты обанкротился» или даже временно заблокировать.Это должно, конечно, перевернуться, когда они переключатся обратно на связь POST.
Beyond Ninja: Вы также можете отправлять GET-запросы, идентичные запросам POST / Cookie, которые будут постоянно обрабатываться медом.Если есть расхождение между GET и POST / COOKIE, то хакер предположил, что это было так же просто, как изменить некоторые переменные get, и вы можете отобразить то же сообщение «Вы пойманы» с возможными временными или постоянными банами из вашей игры.
Пара последних вещей:
- Воспользуйтесь преимуществами новых веб-технологий.Если возможно, вы можете использовать веб-сокеты в качестве транспорта, чтобы превратить его в квартет с медом (WebSockets, POST, Cookies и GET).Вы также можете использовать веб-работников, чтобы скрыть выполнение вашего специального кода.Хотя вы сможете открыть файл JS для работника, я в любом случае не знаю, как напрямую получить доступ к области видимости работника из консоли или из FireBug.
- Используйте тупых хакеров в ваших интересах.Поместите в глупые вещи, которые ожидают хакеры.Если некоторые меры безопасности выглядят плохо или их легко взломать, хакер может получить хулиган или предположить, что вы плохой кодер.Затем они перебираются с такими вещами, как сотовая транспортная система и обанкротятся!
- Наконец, всегда следите за странными шаблонами запросов.Если максимальная скорость игрока составляет 10 пикселей в секунду, но в двух запросах, находящихся на расстоянии всего одной секунды друг от друга, пройденное расстояние составляет 20 пикселей, PHP должен знать, что что-то происходит.Вы могли бы даже позволить PHP отслеживать действие сообщения и время его отправки, отправив быстрое AJAX-сообщение о том, что эй, я собираюсь отправить вам сообщение.Если пользователь изменяет фактическое сообщение, время между первым сообщением и сообщением, содержащим данные, будет изменяться в течение многих секунд.PHP может наблюдать за этим, поскольку обычно компьютеру не требуется более 5 секунд для обработки данных и отправки запросов AJAX.