Files
wow-registrace/README.md
T
vojta 2b9a673912 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.
2026-08-05 11:41:24 +02:00

101 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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í 816 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
```