Як захистити надсилання балів від ігор HTML5 на мій сервер


13

На вихідному я використовую Java. У мене гра в HTML5; коли користувач завершує його, я надсилаю дзвінок Ajax, щоб зберегти бал до бази даних. Тепер хтось може легко використовувати такі інструменти, як Fiddler та firebug, щоб змінити цей запит ajax та надіслати набагато кращий результат на сервер. Як переконатися, що користувач не може маніпулювати балами!

Відповіді:


18

Не просто надсилайте цілому балу на сервер. Надішліть колекцію ігрових статистик, які можна використовувати для перевірки того, що оцінка була реалістичною. Або ви можете ввести якийсь загальнодоступний ключ для обчислення балу. Ви можете надсилати додаткові бали та статистику протягом всієї гри і переконатися, що збільшення розумне.

Однак я б не надто хвилювався з цього приводу. Наведені вище пропозиції ускладнять, але не неможливо надіслати підроблений бал. Однак, якщо ви просто ускладните, переважна більшість людей, які грають у вашу гру, не будуть зацікавлені у спробах її обдурити.

Будьте уважні до того, як ви дозволяєте грі спілкуватися з вашим сервером. Ви не хочете, щоб ваша гра стала точкою входу на ваш сервер для злому. Переконайтеся, що ви завжди підтверджуєте свої дані та ніколи не довіряєте клієнту.



@ Byte56 жодна форма обтурації чи шифрування не захистить ваш код від налагоджувача, який використовується для зміни даних гри під час гри. Якщо геймплей трапляється на клієнта, запобігти цій формі обману неможливо. Веб-переглядач, що підтримує Javascript, не є надійним обчислювальним пристроєм.
МаркР

10

Як сказав Byte56: "ніколи не довіряйте клієнту", але:

Ніколи не довіряючи клієнтові ціна:
Якщо всі ігри грати на сервері, ви збільшите ваші інфраструктурні витрати.

Якщо припустити, що більшість гравців не обдурять,
а найкращий рейтинг виграє через деякий час і перестане багато змінюватися

є середній шлях.

Запис ігор (на стороні клієнта).
(Залежно від типу гри, яка може бути дуже простою (наприклад, у шахи) або трохи складною (наприклад, багатокористувацька FPS),
але це завжди можливо.)

Коли гравець закінчує гру, просто подайте рахунок.
Якщо рахунок знаходиться в певному діапазоні вгорі (наприклад, верхній 1% або топ 5),
вимагайте записати дані від гравця
та повторіть цю гру на сервері.
Якщо бали відповідають, прийміть рахунок.

Таким чином, для більшості п’єс вам не потрібні додаткові ресурси на сервері,
але можна забезпечити, щоб найкращі результати були дійсними.


2
Іншими словами, кого байдуже, якщо вони обманюють будь-що, окрім найкращих балів (навіщо це взагалі робити?), Тож це єдині, що вам потрібно підтвердити.
поштовх

4

Не хвилюйтеся про це; захист від усіх атак по суті неможливий, якщо ви довіряєте клієнту. Якщо ніхто не використовує Fiddler тощо, щоб змінити запит AJAX, вони можуть просто запустити налагоджувач JS і змінити ваші ігрові дані, щоб дати собі 1000 життів тощо, або змінити ваш код, або зробити 100 інших речей, про які ви не думали.

Я писав таку гру кілька років тому, і наскільки мені було відомо, ніхто не обманював таким чином. Призу не було, окрім того, як ваше таблиця зазначалося на таблиці результатів.


4

Знизити соціальну мотивацію до обману, наприклад, використовуючи таблицю соціальних лідерів (обман лише змушує вас виглядати жменькою друзів, але це не зіпсує її для всіх).

Перевірка на сервері. Джоел Полоні добре зареєстрував методику в Game Developer 2012 вересня "Розгорніть свою онлайн-гру"


2

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

Звичайно, гра, яка працює на сервері, набагато складніше розробити, вимагає набагато більше ресурсів на стороні сервера, а затримка в мережі є згубною для ігрового досвіду (особливо для швидких ігор), але це єдиний спосіб ефективно не дозволяти гравцям обманювати.


Навіть це не завадить всім обманам - просто очевидний "так, я легітимно отримав мільйон балів". Оскільки щось повинно працювати на клієнті, вони закінчуються деяким контролем незалежно. Принаймні, будь-який клієнт, особливо веб-браузер, може бути сприятливим.
cHao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.