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

189 lines
5.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔒 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!