5.6 KiB
5.6 KiB
🔒 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
1️⃣ Copyright & Licencja
- ✅ 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:
- ✅ Używaj
game-validator.phpdo wszystkich wyników - ✅ Generuj tokeny sesji przed każdą grą
- ✅ Loguj wszystkie podejrzane aktywności
- ✅ Monitoruj wzorce graczy (AI może wykryć boty)
- ✅ Rate limiting na poziomie serwera
- ✅ 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!