WoW-Privatserver-Website erstellen: CMS & Anbindung
WoW-Privatserver-Website erstellen
Ein World-of-Warcraft-Privatserver läuft auf einem Emulator wie TrinityCore, AzerothCore oder CMaNGOS. Der Emulator selbst hat keine Registrierungsseite: Wer mitspielen will, braucht einen Account in der Auth-Datenbank. Genau dafür brauchen Sie eine Website. Ihre Kernaufgabe ist nicht das Aussehen, sondern eine korrekte, sichere Account-Registrierung, die den passenden Passwort-Hash in die Datenbank schreibt. Wie diese Registrierung technisch funktioniert, welcher Fehler den Login typischerweise blockiert und welche Bausteine eine brauchbare Serverseite braucht, klären die folgenden Abschnitte.
Was die Website tatsächlich leisten muss
Die Optik ist zweitrangig. Funktional sind vier Dinge Pflicht und drei optional:
- Registrierung – legt einen Datensatz in der Tabelle
accountder Auth-Datenbank an. - Login / Account-Verwaltung – Passwort ändern, E-Mail hinterlegen, ggf. Charaktere ansehen.
- Realmlist-Anzeige – die Zeile
set realmlist deine-domain.de, die Spieler in ihren Client eintragen. - Downloads – Client, Launcher/Patch, ggf. eine vorkonfigurierte
realmlist.wtf. - Optional: Serverstatus (online/offline, Spielerzahl), Item-/Quest-Datenbank (Armory), ein Voteshop oder Donation-Bereich.
Alles Weitere ist Zierde. Wenn Registrierung und Realmlist stimmen, kann jemand spielen.
Fertiges CMS oder selbst bauen?
Für die meisten Betreiber ist ein fertiges CMS der schnellste Weg. In der Szene verbreitet sind das kommerzielle FusionCMS und ältere Open-Source-Projekte aus dem MaNGOS-Umfeld (etwa MangosWeb Enhanced). Diese bringen Registrierung, Login, Voteshop und Newsbereich mit. Prüfen Sie vor der Wahl, ob das CMS Ihren Emulator und Ihre Spielversion unterstützt und ob es die SRP6-Authentifizierung beherrscht – viele alte CMS setzen noch auf das veraltete sha_pass_hash-Verfahren und funktionieren mit aktuellen Cores nicht mehr.
Der Selbstbau lohnt, wenn Sie volle Kontrolle wollen. Ein schlankes Setup aus PHP (Laravel) oder Node.js plus einer Datenbankverbindung genügt. Der schwierige Teil ist immer derselbe: das Passwort korrekt hashen. Deshalb zuerst dieser Punkt.
Der Knackpunkt: Account-Registrierung und Passwort-Hash
Aktuelle Versionen von TrinityCore und AzerothCore (WotLK 3.3.5a) speichern Passwörter nicht mehr als einfachen SHA1-Hash, sondern per SRP6 als Kombination aus salt und verifier in der Tabelle account. Wenn Sie in dieses Feld einen falschen Wert schreiben, existiert der Account zwar, aber der Login im Spiel schlägt mit „Falsches Passwort“ fehl. Das ist der häufigste Anfängerfehler.
Sie haben zwei saubere Wege.
Weg A (empfohlen): Registrierung über SOAP
Aktivieren Sie in der worldserver.conf die SOAP-Schnittstelle (SOAP.Enabled = 1, Standardport 7878). Ihre Website schickt dann einen SOAP-Aufruf, der den Emulator-Befehl account create <name> <passwort> ausführt. Der Vorteil: Der Emulator erzeugt Salt und Verifier selbst und garantiert immer den richtigen Hash – Sie müssen SRP6 nie nachbauen.
$user = 'testuser';
$pass = 'geheim123';
$soap = new SoapClient(null, [
'location' => 'http://127.0.0.1:7878/',
'uri' => 'urn:AC', // TrinityCore: 'urn:TC'
'login' => 'DEIN_GM_ACCOUNT',
'password' => 'DEIN_GM_PASSWORT',
'style' => SOAP_RPC,
]);
$soap->executeCommand(new SoapParam("account create $user $pass", 'command'));
Wichtig: Der SOAP-Zugang läuft über einen GM-Account mit Konsolenrechten, und der Port darf niemals öffentlich erreichbar sein. Binden Sie ihn an 127.0.0.1 und lassen Sie Website und Server auf demselben Host laufen oder tunneln Sie intern.
Weg B: SRP6 direkt in der Datenbank
Wenn kein SOAP verfügbar ist, berechnen Sie Salt und Verifier selbst und schreiben sie per INSERT. SRP6 nutzt hier feste Parameter (Generator g = 7, ein definierter Primzahl-Modulus N) und die Formel x = SHA1(salt || SHA1(UPPER(user) || ":" || UPPER(pass))), daraus verifier = g^x mod N. Achten Sie auf Groß-/Kleinschreibung: Benutzername und Passwort werden vor dem Hashen in Großbuchstaben umgewandelt. Für PHP, Python oder Node.js gibt es fertige SRP6-Snippets in den Core-Repositories; nutzen Sie diese, statt die Bignum-Mathematik von Hand zu implementieren.
Speichern Sie Passwörter nie im Klartext und protokollieren Sie sie auch nicht.
Datenbank sauber anbinden
Ein Privatserver hat üblicherweise drei Datenbanken: auth (Accounts, Realms), characters (Charaktere, Gilden) und world (Spielinhalte). Ihre Website braucht in der Regel nur Zugriff auf auth und lesend auf characters.
Legen Sie dafür einen eigenen MySQL-Benutzer mit minimalen Rechten an – nicht den Root-User:
CREATE USER 'web'@'localhost' IDENTIFIED BY 'starkes-passwort';
GRANT SELECT, INSERT, UPDATE ON auth.account TO 'web'@'localhost';
GRANT SELECT ON `characters`.* TO 'web'@'localhost';
FLUSH PRIVILEGES;
So kann ein kompromittiertes Web-Skript keine Spielinhalte oder fremde Datenbanken zerstören. Setzen Sie zusätzlich auf prepared statements (PDO/Parameterbindung), um SQL-Injection auszuschließen.
Serverstatus und Spielerzahl anzeigen
Zwei einfache Signale wirken auf Besucher sofort seriös:
- Online/Offline: Prüfen Sie per Socket, ob der Auth-Port (Standard 3724) erreichbar ist. Antwortet der Port, läuft der Server.
- Spieler online: Eine Abfrage auf die Charakter-Datenbank:
SELECT COUNT(*) FROM characters.characters WHERE online = 1;
Cachen Sie beide Werte für 30–60 Sekunden, damit nicht jeder Seitenaufruf eine Datenbank- oder Socket-Abfrage auslöst.
Hosting, Domain und Sicherheit
Website und Game-Server liegen häufig auf demselben Root-Server oder VPS – das vereinfacht die interne SOAP- und DB-Anbindung. Wie viel ein solcher Server kostet, ordnet unser Beitrag zu den monatlichen Serverkosten ein; für die Frage nach eigener Hardware oder Miete lohnt der Blick auf die Kosten eines eigenen Webservers.
Fürs Sicherheitsminimum gilt:
- TLS/HTTPS erzwingen (Passwörter gehen sonst im Klartext über die Leitung).
- Registrierung drosseln: Rate-Limit plus Captcha, sonst legen Bots massenhaft Accounts an.
- SOAP-Port und DB-Port nur an
localhostbinden, per Firewall (ufw/iptables) von außen sperren. - Realmlist-IP korrekt in der
realmlist-Tabelle der Auth-DB hinterlegen, sonst verbinden Spieler nach dem Login nicht zum Welt-Server.
Ein Wort zur Rechtslage: Der Betrieb eines WoW-Privatservers bewegt sich urheberrechtlich in einer Grauzone und verstößt gegen die Nutzungsbedingungen von Blizzard, da Client und Spielinhalte geschütztes Material sind. Das ist keine Rechtsberatung – informieren Sie sich vor einem öffentlichen Betrieb über die Risiken.
FAQ
Warum kommt beim Login „Falsches Passwort“, obwohl der Account existiert?
Fast immer stimmt der SRP6-Verifier nicht. Entweder wurde noch das alte sha_pass_hash-Feld befüllt, oder Benutzername/Passwort wurden vor dem Hashen nicht in Großbuchstaben umgewandelt. Der sicherste Fix ist die Registrierung über SOAP (account create), weil der Emulator den Hash selbst erzeugt.
Brauche ich zwingend ein CMS? Nein. Ein paar PHP-Seiten mit Registrierung, Login und Realmlist reichen, um Spieler auf den Server zu bringen. Ein CMS spart Zeit bei Voteshop, News und Account-Panel, ist aber kein Muss.
Kann die Website auf einem anderen Server als der Emulator laufen? Ja, dann dürfen SOAP- und MySQL-Port aber nicht offen im Internet stehen. Verbinden Sie beide Hosts über ein privates Netz oder einen SSH-Tunnel und lassen Sie die Ports nach außen geschlossen.
Verwandte Themen: gefragte Programmiersprachen und aktuelle Gaming-Trends.