2b9a673912
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.
101 lines
4.0 KiB
Markdown
101 lines
4.0 KiB
Markdown
# 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
|
||
```
|