Initial commit: AzerothCore registration site
PHP registration page for AzerothCore with SRP6 salt/verifier generation, Cloudflare Turnstile + honeypot + rate limiting anti-spam, and a WoW-themed landing page with client setup instructions.
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
# Registrace účtů — AzerothCore
|
||||
|
||||
Jednoduchá PHP registrační stránka pro AzerothCore server. Vytváří účet
|
||||
přímo v `acore_auth`.`account` tabulce se správně spočítaným SRP6
|
||||
salt/verifierem, takže se hráč může rovnou přihlásit ve hře.
|
||||
|
||||
## Ochrana proti spamu/botům
|
||||
|
||||
- **Cloudflare Turnstile** — captcha ověřená server-side (volitelná: pokud
|
||||
necháš `TURNSTILE_SITE_KEY`/`TURNSTILE_SECRET_KEY` prázdné, widget se
|
||||
nezobrazí a ověření se přeskočí — pro produkci ale doporučuji vyplnit).
|
||||
- **Honeypot pole** — skryté pole `website`, které boti často vyplní;
|
||||
formulář pak předstírá úspěch, ale nic se nezapíše.
|
||||
- **Rate limiting** — max. N registračních pokusů z jedné IP za časové
|
||||
okno (výchozí 5 / hodinu), ukládá se do lokální SQLite (`data/ratelimit.sqlite`),
|
||||
nezasahuje do AzerothCore databáze.
|
||||
- **CSRF token** na formuláři.
|
||||
|
||||
## Požadavky na serveru
|
||||
|
||||
- PHP 8.1+
|
||||
- PHP rozšíření: `pdo_mysql`, `pdo_sqlite`, `gmp`, `session`, `openssl`
|
||||
- Webserver (Apache s `mod_php`/PHP-FPM, nebo nginx + PHP-FPM)
|
||||
- Síťový/lokální přístup k MySQL, kde běží `acore_auth`
|
||||
|
||||
## Instalace
|
||||
|
||||
1. Zkopíruj `.env.example` do `.env` a vyplň:
|
||||
- `DB_HOST`, `DB_PORT`, `DB_DATABASE` (typicky `acore_auth`), `DB_USERNAME`, `DB_PASSWORD`
|
||||
- `TURNSTILE_SITE_KEY` / `TURNSTILE_SECRET_KEY` z Cloudflare dashboardu
|
||||
|
||||
2. Vytvoř v MySQL **dedikovaného uživatele** jen s právy na tabulku `account`
|
||||
(neházej tam root přístup):
|
||||
|
||||
```sql
|
||||
CREATE USER 'acore_reg'@'localhost' IDENTIFIED BY 'silne-nahodne-heslo';
|
||||
GRANT SELECT, INSERT ON acore_auth.account TO 'acore_reg'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
3. Nastav webserver tak, aby **DocumentRoot mířil na `public/`**, ne na kořen
|
||||
projektu — `includes/`, `data/` a `.env` tak nebudou z webu dostupné vůbec.
|
||||
|
||||
Příklad Apache vhost:
|
||||
|
||||
```apache
|
||||
<VirtualHost *:443>
|
||||
ServerName registrace.tvuj-server.cz
|
||||
DocumentRoot /cesta/k/wowserver-registrace/public
|
||||
|
||||
<Directory /cesta/k/wowserver-registrace/public>
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
4. Uprav práva zápisu na `data/` (potřebuje tam vzniknout `ratelimit.sqlite`):
|
||||
|
||||
```bash
|
||||
chown -R www-data:www-data data
|
||||
chmod 750 data
|
||||
```
|
||||
|
||||
5. Ověř, že GMP na serveru počítá SRP6 verifier správně (porovná se s
|
||||
nezávisle spočítanou referenční hodnotou):
|
||||
|
||||
```bash
|
||||
php includes/srp6_selftest.php
|
||||
```
|
||||
|
||||
Očekávaný výstup je `OK - shoduje se s referenční implementací.` Pokud
|
||||
vypíše chybu, něco je špatně s PHP/GMP na serveru a registrace by
|
||||
vytvářela účty, se kterými se nepůjde přihlásit — než to nespadne,
|
||||
dál nepokračuj.
|
||||
|
||||
6. Otevři stránku v prohlížeči, vyzkoušej registraci, ověř že se v `account`
|
||||
tabulce objevil nový řádek a že se přihlásíš herním klientem.
|
||||
|
||||
## Poznámky k herním pravidlům
|
||||
|
||||
- Uživatelské jméno i heslo se před výpočtem SRP6 verifieru převádí na
|
||||
velká písmena (`strtoupper`) a jméno se tak i ukládá — přesně jak to dělá
|
||||
samotný AzerothCore/klient, aby přihlášení fungovalo case-insensitive.
|
||||
- Heslo je omezené na tisknutelná ASCII znaky (`REG_PASSWORD_MIN/MAX` v `.env`,
|
||||
výchozí 8–16 znaků) — WoW klient jiné znaky v hesle nepodporuje.
|
||||
- `expansion`, `locale` a další sloupce tabulky `account` se nechávají na
|
||||
výchozích hodnotách definovaných v DB schématu AzerothCore — uprav
|
||||
`public/register.php`, pokud chceš nový účet zařadit jinak (např. jiný expansion level).
|
||||
- Pokud web neběží přímo na stejném stroji jako MySQL, zvaž TLS pro DB
|
||||
spojení nebo tunelování (SSH tunel / VPN), ať heslo/verifier neputuje po síti čistě.
|
||||
|
||||
## Struktura projektu
|
||||
|
||||
```
|
||||
includes/ # PHP logika mimo webroot (DB, SRP6, Turnstile, rate limiter)
|
||||
public/ # webroot — index.php (formulář), register.php (zpracování)
|
||||
data/ # SQLite pro rate limiting (zapisovatelné webserverem)
|
||||
.env # tajné údaje, needituj do gitu
|
||||
```
|
||||
Reference in New Issue
Block a user