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

4.0 KiB
Raw Blame History

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):

    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:

    <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):

    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):

    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