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.
4.0 KiB
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
-
Zkopíruj
.env.exampledo.enva vyplň:DB_HOST,DB_PORT,DB_DATABASE(typickyacore_auth),DB_USERNAME,DB_PASSWORDTURNSTILE_SITE_KEY/TURNSTILE_SECRET_KEYz Cloudflare dashboardu
-
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 registrace.tvuj-server.cz DocumentRoot /cesta/k/wowserver-registrace/public <Directory /cesta/k/wowserver-registrace/public> AllowOverride All Require all granted </Directory> </VirtualHost> -
Uprav práva zápisu na
data/(potřebuje tam vzniknoutratelimit.sqlite):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.
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