189 lines
5.6 KiB
Markdown
189 lines
5.6 KiB
Markdown
# 🔒 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)
|
||
```powershell
|
||
# 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:
|
||
```javascript
|
||
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!**
|
||
|
||
```php
|
||
// 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:**
|
||
```javascript
|
||
// 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:
|
||
```javascript
|
||
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ą
|
||
|
||
```bash
|
||
# 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ą
|
||
```javascript
|
||
// Użyj Google reCAPTCHA v3
|
||
grecaptcha.ready(function() {
|
||
grecaptcha.execute('YOUR_SITE_KEY', {action: 'start_game'})
|
||
});
|
||
```
|
||
|
||
### B. Fingerprinting użytkowników
|
||
```javascript
|
||
// 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!
|