Як ви не можете скопіювати чи змінити веб-гру JavaScript / HTML5?


45

Я в середині планую гру, побудовану за допомогою JavaScript та HTML5.

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

Чи можна щось зробити, щоб хто-небудь не читав JavaScript?

Якщо ні, то чи повинна вся обробка ігор проходити на сервері десь з єдиним обов'язком клієнта - збиранням вводу користувача та малюванням графіки?


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

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

Відповіді:


44

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

Щоб ваш JavaScript був менш копіюваним, через погану читабельність ви можете його мінімізувати . Це все-таки хороша практика, оскільки це робить ігровий сайт швидшим завантаженням.


4
Залежно від практики кодування, весь вміст на сервері може бути також порушений. Щоб мінімізувати код і придушити лише відпущення тих, хто не хоче витрачати час, і логічно відобразити, що він робить. Суть полягає в тому, що якщо ви переживаєте за права інтелектуальної власності вашого коду; не розміщуйте його в Інтернеті.
Іван

1
Це не означає, що ви не повинні мінімізувати, що стримує ледачих людей. Ви також можете спробувати обробити свою логіку гри на сервері та повернути об’єкти json через ajax, але повернення все ще можна переглянути за допомогою firebug. Заглушіть свою виробничу версію, але зберігайте для себе сильно коментовану версію (це ускладнює підтримку). Ви можете робити речі, щоб стримувати людей, але це ніколи не є 100% безпечним.
Іван

3
Справді. Розширення мінімізованого коду навіть не вимагає великих зусиль. jsbeautifier.org
Джеймс

@ Джон, будь ласка, зауважте, що іноді стримування ледачих людей не має значення, оскільки деякі ігри руйнуються, як тільки з'являється один шахрай, тому це не має значення, якщо обманюють лише одного чи багатьох.
o0 '.

11

як ви могли завадити комусь просто скопіювати JavaScript з веб-сервера та зробити власну гру з ним (не моє найбільше занепокоєння)

Тут допомагає закон. На практиці це здається не дуже часто.

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

У дикій природі немає надійних клієнтів саме з цієї причини. Відмовтеся від цієї мрії зараз. :)


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

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

8

Так само, як рекомендували всі інші; зберігайте якомога більше коду на стороні сервера.

Метод, який я використовував для роботи з копіюванням коду, трохи дивний, але він добре працював до цих пір.

  • На сервері, генеруйте унікальний ідентифікатор і зберігайте його для подальшого.
  • Сторінка сервера, додайте унікальний ідентифікатор в елемент сценарію під час html-рендерінгу.
  • На стороні клієнта створіть з'єднання WebSocket і передайте унікальний ідентифікатор серверу.
  • Сторона сервера, збіг ідентифікатора з поточним списком.
  • Якщо збігу не знайдено, перервіть з'єднання.
  • Якщо матч буде знайдений, замінити обробник повідомлень з «правильним» один і скинутим ідентифікатором.
  • Передайте секретний код клієнту як JSON, {"func": "function () {dostuff ();}"}
  • З боку клієнта, слідкуйте за повідомленнями, якщо вони містять "func", оцінюйте це.

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


Якщо мені потрібно було схопити щось із наведеного рішення; Я б також підключив справжній WebSocket і спробував зробити "підроблений клієнт" або використовувати інструмент налагодження Firebug у браузері і просто зупинити сценарій, щоб перевірити значення.
BerggreenDK

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

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

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

3

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

Основне питання полягає в тому, що якщо код працює на моєму комп’ютері, я можу його перевірити, декомпілювати і зрозуміти, як він працює. Це стосується JavaScript, Flash, C ++ та будь-чого іншого. Насправді, в розробці MMO (саме там основна частина мого професійного досвіду) припущення з самого початку полягає в тому, що клієнт піддається компромісу: все, що ви написали для клієнта, вже в руках того, хто цього хоче, зловмисного чи ні.

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

Але якщо ви потрапили в ситуацію, коли, скажімо, ваш начальник хоче отримати якийсь захист коду, ви можете перейти в Google "Javascript obfuscator" - там багато безкоштовного і платного програмного забезпечення, яке робить JS принаймні непрозорим до декомпіляції як Flash.


Я просто хочу зазначити, що C ++ не на тому рівні, як Javascript. C ++ компілює до складання, який комусь потрібно прочитати, щоб зрозуміти логіку гри. Кожне висловлення в C ++ може створити декілька рядків у складанні, що робить це дуже трудомістким завданням. Заблукаючий JavaScript не є однаковим, оскільки його однакова мова. Будь-який бажаючий може "прикрасити" це і почати читати майже зрозумілі для людини заяви.
TomTsagk

3

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


Це добре для того, що воно варте, але це не багато. Поняття інтелектуальної власності на практиці не визнається у багатьох країнах, і, у будь-якому випадку, судові витрати у судовій справі, ймовірно, набагато вищі, ніж доступний для цього сайту плакат, особливо якщо зловмисник перебуває в іншій країні.
Пол Легато

0

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


-1

Потрібно використовувати Javascript Minifier. Є безліч варіантів, сміливо знайдіть той, який вам сподобався. Щоб заощадити кілька досліджень, ви можете спробувати Yahoo Minifier . Я сам цього не запускав, але припускаю, що це зробить те, що вам потрібно. Мета - 1) зменшити розмір файлу та 2) придушити код. Це досягається шляхом вилучення всього пробілу, коментарів та заміни імен змінних на більш короткі, безглузді.

Більшість веб-додатків сьогодні мають значну кількість Javascript і використовують такі інструменти, як ці, щоб спробувати захистити свій IP. Як говорили інші, ви завжди повинні запитувати: "Чи можу я це зробити на сервері?" для важливих або чутливих операцій, але я вважаю, що це повинно забезпечити певний захист.


7
Безпека через невідомість затьмарює потенціал безпеки. :)
Rushyo

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

2
minifier не допомагає йому. Я вважаю, що більшість "серйозних" людей знають, як знову "розширити" ці сценарії.
BerggreenDK

1
@Sergio: цю цитату ти чуєш постійно, бо, знаєш, це правда . Це буде стримувати "деяких" людей, правда, але стримувати "деяких" людей безглуздо: коли ти один раз зламаєшся , ти йдеш вниз.
o0 '.

-1

Використовуйте компілятор закриття Google http://code.google.com/closure/compiler/ Це не лише js мінімізатор;)

Які переваги використання компілятора закриття?

  1. Ефективність. Компілятор закриття зменшує розмір ваших файлів JavaScript і робить їх більш ефективними, допомагаючи вашій програмі швидше завантажуватися та зменшуючи потреби в пропускній здатності.

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


-1

Або ви можете використовувати щось на кшталт Game Maker HTML5, щоб створити свою гру, яка придушить код для вас. Це означає, що це зробить код нечитабельним для людей. І редагувати це буде майже неможливо.


2
-1 Обмескування піде лише поки що. Це, безумовно, не захистить гру від копіювання чи зміни - як це було зазначено в інших відповідях на це запитання.
doppelgreener

-1

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


-1

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

Ви можете написати свій код в c ++ і компілювати його у двійкові файли.

Рідний клієнт (NaCl).

Дивіться https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser


Ласкаво просимо на GDSE. OP запитує конкретно про JavaScript; тому, хоча вони, можливо, можуть переписати на C ++ та використовувати NaCl, це рішення насправді не відповідає потребам, як зазначено. Крім того, відповіді повинні бути максимально доступними для себе - згадування про NaCl та демпінг посилання не так добре, як пропонувати резюме щодо того, що таке NaCl або чому це може допомогти.
Пікалек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.