Instalační kroky teď počítají s nasazením přes git clone na server místo ručního kopírování souborů, plus doplněné proměnné pro úvodní stránku a alternativní Nginx+PHP-FPM konfigurace vedle Apache.
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_KEYprá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
-
Naklonuj repozitář na server, mimo webroot ostatních webů (např. vedle PlayerMap):
git clone https://gitea.minkey.cz/vojta/wow-registrace.git cd wow-registrace -
Zkopíruj
.env.exampledo.enva vyplň:SITE_NAME,REALMLIST_ADDRESS(wow.minkey.cz),CLIENT_VERSION, případněCLIENT_DOWNLOAD_URL— zobrazují se na úvodní stránceDB_HOST,DB_PORT,DB_DATABASE(typickyacore_auth),DB_USERNAME,DB_PASSWORDTURNSTILE_SITE_KEY/TURNSTILE_SECRET_KEYz Cloudflare dashboardu
.envse negituje (je v.gitignore) — na serveru ho vytváříš ručně, nikdy ho nepushuj do repozitáře. -
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; -
Nastav webserver tak, aby DocumentRoot mířil na
public/, ne na kořen projektu —includes/,data/a.envtak nebudou z webu dostupné vůbec.Příklad Apache vhost:
<VirtualHost *:443> ServerName wow.minkey.cz DocumentRoot /cesta/k/wow-registrace/public <Directory /cesta/k/wow-registrace/public> AllowOverride All Require all granted </Directory> </VirtualHost>Příklad Nginx + PHP-FPM (uprav
fastcgi_passpodle svého PHP-FPM socketu, stejně jako to máš u PlayerMap):server { listen 443 ssl http2; server_name wow.minkey.cz; root /cesta/k/wow-registrace/public; index index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # includes/, data/ a .env jsou mimo document root, takže už jsou # skryté; tenhle blok je jen pojistka, kdyby se root někdy spletl location ~ /\.(env|git) { deny all; } } -
Uprav práva zápisu na
data/(potřebuje tam vzniknoutratelimit.sqlite) — uprav uživatele podle toho, pod kterým webserver skutečně běží (www-datana Debianu/Ubuntu,httpna Arch,nginxapod.):chown -R www-data:www-data data chmod 750 data -
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.phpOč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. -
Otevři stránku v prohlížeči, vyzkoušej registraci, ověř že se v
accounttabulce objevil nový řádek a že se přihlásíš herním klientem.
Aktualizace
cd /cesta/k/wow-registrace
git pull
.env a data/ratelimit.sqlite nejsou v repozitáři, takže git pull
je nepřepíše.
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/MAXv.env, výchozí 8–16 znaků) — WoW klient jiné znaky v hesle nepodporuje. expansion,localea další sloupce tabulkyaccountse nechávají na výchozích hodnotách definovaných v DB schématu AzerothCore — upravpublic/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