togethere.cloud/private_html/disciplines/ping-pong/SECURITY.md

5.6 KiB
Raw Blame History

🔒 Zabezpieczenia Neon Ping-Pong Game

⚠️ WAŻNE: Kod JavaScript NIE JEST w 100% bezpieczny

Kod działający po stronie klienta (JavaScript) jest ZAWSZE widoczny i można go skopiować. Jednak dodaliśmy wiele warstw zabezpieczeń:

🛡️ Zaimplementowane Zabezpieczenia

  • Wszystkie pliki mają nagłówki copyright
  • Jasna informacja o prawach autorskich
  • Ochrona prawna przed kopiowaniem

2 Obfuskacja Kodu (build.ps1)

# Uruchom przed wdrożeniem na produkcję:
.\build.ps1

Co robi obfuskacja:

  • 🔀 Zmienia nazwy zmiennych na niemożliwe do odczytania
  • 🌀 Komplikuje przepływ kodu (control flow flattening)
  • 💀 Dodaje "martwy kod" jako pułapki
  • 🔒 Szyfrowanie stringów (RC4)
  • 🛡️ Self-defending code
  • 🚫 Debug protection

Efekt: Kod staje się praktycznie nieczytelny, np:

var _0x4a2b=['push','apply','charCodeAt','fromCharCode'];
(function(_0x12d8,_0x4a2b){var _0x2d55=function(_0x32d5){...

3 Anti-Tamper Protection (anti-tamper.js)

Wykrywa i blokuje próby oszustwa:

Ochrona Opis
🔍 DevTools Detection Wykrywa otwarcie narzędzi developerskich
🧬 Code Integrity Sprawdza czy kod nie został zmodyfikowany
🎯 DOM Monitoring Wykrywa nielegalne zmiany w canvas
Speed Hack Detection Wykrywa manipulację czasem gry
🚫 Console Blocking Wyłącza console.log w produkcji
📊 Violation Tracking Po 3 naruszeniach = BAN

Przykład blokady:

CHEATING DETECTED
Your session has been terminated

4 Server-Side Validation (game-validator.php)

Walidacja po stronie serwera - NAJWAŻNIEJSZE!

// Sprawdza:
 Token sesji
 Poprawność wyników (max 10 punktów)
 Czas gry (30s - 10min)
 Rate limiting (max 10 gier/godz)
 Podejrzane statystyki (100% accuracy = cheat)
 Win rate (>95% = podejrzane)

Użycie:

// Po zakończeniu gry wyślij wynik do serwera
fetch('/api/game-validator.php', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({
        playerScore: 10,
        botScore: 5,
        gameDuration: 120,
        difficulty: 'easy',
        sessionToken: 'xxx',
        userId: 123
    })
});

5 IIFE Wrapping

Wszystkie moduły opakowane w (function(){...})():

  • Izolacja scope
  • Brak globalnych zmiennych
  • Trudniejsza manipulacja

6 Object.freeze()

Kluczowe obiekty są zamrożone:

Object.freeze(window.botAI.difficulties);
// Nie można modyfikować poziomów trudności

🎯 Poziomy Ochrony

Poziom Chroni przed Skuteczność
Copyright Legalne kopiowanie (Prawnie)
Obfuskacja Kopiowanie kodu
Anti-tamper Oszustwa w czasie rzeczywistym
Server Validation Fałszywe wyniki

📋 Checklist przed Produkcją

# 1. Uruchom obfuskację
.\build.ps1

# 2. Zmień ścieżki w index.php z js/ na dist/js/
# Zamiast: /disciplines/ping-pong/js/game.js
# Użyj:    /disciplines/ping-pong/dist/js/game.js

# 3. Włącz anti-debug w produkcji (odkomentuj w game.js):
if (window.location.hostname !== 'twoja-domena.pl') antiDebug();

# 4. Skonfiguruj game-validator.php z bazą danych

# 5. Dodaj do .htaccess:
# Header set X-Content-Type-Options "nosniff"
# Header set X-Frame-Options "SAMEORIGIN"

🚨 Co NADAL można skopiować?

Prawda jest taka:

  • Kod JavaScript można zawsze zobaczyć w przeglądarce
  • Można skopiować gameplay i mechanikę
  • Można robić screenshoty i nagrania
  • ALE: Trudno zrozumieć obfuskowany kod
  • ALE: Server-side validation zapobiega oszustwom
  • ALE: Copyright chroni prawnie

💡 Najlepsza Ochrona = Server-Side Logic

Zalecenia:

  1. Używaj game-validator.php do wszystkich wyników
  2. Generuj tokeny sesji przed każdą grą
  3. Loguj wszystkie podejrzane aktywności
  4. Monitoruj wzorce graczy (AI może wykryć boty)
  5. Rate limiting na poziomie serwera
  6. Rankingi TYLKO na podstawie zweryfikowanych wyników

🔑 Dodatkowe Zabezpieczenia (Opcjonalne)

A. Captcha przed grą

// Użyj Google reCAPTCHA v3
grecaptcha.ready(function() {
    grecaptcha.execute('YOUR_SITE_KEY', {action: 'start_game'})
});

B. Fingerprinting użytkowników

// Użyj biblioteki jak FingerprintJS
const fpPromise = FingerprintJS.load();
fpPromise.then(fp => fp.get())

C. WebAssembly dla krytycznej logiki

Przenieś części logiki do WASM (trudniejsze do reverse-engineer)

D. Tokenizacja po stronie serwera

Każdy ruch gry wymaga tokenu z serwera

📊 Monitoring

Utwórz dashboard do monitorowania:

  • 🔍 Liczba wykrytych prób cheating
  • 📈 Statystyki graczy
  • ⚠️ Podejrzane wzorce (np. 100% win rate)
  • 📍 IP addresses z wieloma naruszeniami

⚖️ Podsumowanie

Nie da się w 100% zabezpieczyć kodu JavaScript, ale:

  • Obfuskacja = bardzo trudne kopiowanie
  • Anti-tamper = wykrywa oszustwa
  • Server validation = zapobiega fałszywym wynikom
  • Copyright = ochrona prawna
  • Kombinacja wszystkich = bardzo dobra ochrona

Dla setek tysięcy graczy najważniejsze jest: 🔐 Server-side validation - to jedyna prawdziwa ochrona!