- Affected Version
- WoltLab Suite 5.3
Hallo,
ich habe das Problem das etwas bei uns was in die Dateien vom WSC eingreift nicht mehr funktioniert seit dem 5.3.0 Update.
Bei uns ist das Forum für ein Gameserver dessen Accounts über ein eigenes PHP gestütztes UCP angelegt werden.
Wir haben es bei uns im UCP so gemacht, dass das UCP bei erfolgreicher E-Mail Aktivierung im UCP den Account auch im Forum anlegt über das Registerformular.
Unser Forum hat folgende Optionen in der Benutzerregistrierung:
Im ACP unter Konfiguration -> Benutzer -> Registierung:
Registrierung deaktivieren: Nein
Nutzungsbedingungen aktivieren: Nein
Aktivierungsmethode: Keine Aktivierung notwendig
Sicherheitsüberprüfung aktivieren: Nein(Wurde ersetzt durch eine neue Funktion die wir ebenfalls deaktiviert haben)
Dann haben wir in der Datei /lib/form/RegisterForm.class.php nach "assignVariables" gesucht und direkt hinter "public function assignVariables() {" folgenden Code eingefügt:
$regAllowed = ((isset($_REQUEST['regSecret'])&&$_REQUEST['regSecret']=='uDe4sdhwepRy') ? true : false);
if (!$regAllowed) {
header("Location: https://cp.blabla.tld/?page=register");
exit();
}
Außerdem haben wir in der gleichen Datei "public static $minRegistrationTime = 10;" auf "public static $minRegistrationTime = 0; " geändert
Im templates Ordner haben wir folgende Dateien ersetzt:
{include file='formError'}
<form method="post" action="">
<input type="text" id="username" placeholder="username" name="{@$randomFieldNames[username]}" value=""><br>
<input type="text" id="email1" placeholder="email1" name="{@$randomFieldNames[email]}" value=""><br>
<input type="text" id="email2" placeholder="email2" name="{@$randomFieldNames[confirmEmail]}" value=""><br>
<input type="text" id="pw1" placeholder="pw1" name="{@$randomFieldNames[password]}" value=""><br>
<input type="text" id="pw2" placeholder="pw2" name="{@$randomFieldNames[confirmPassword]}" value=""><br>
{@SECURITY_TOKEN_INPUT_TAG}<br>
<input type="submit">
</form>
{include file='userMenuSidebar'}
{include file='header' __disableAds=true __sidebarLeftHasMenu=true}
<p class="info">Deine E-Mail Adresse und dein Passwort kannst Du im Control-Panel ändern.<br><a href="https://cp.example.com/?page=settings" target="_blank">Klicke hier um zum User-Panel zu gelangen.</a></p>
{include file='footer' __disableAds=true}
Mit https://domain.tld/index.php?register®Secret=uDe4sdhwepRy ist das Register dann noch weiterhin erreichbar.
Wenn im UCP der Account über den Aktivierungslink aktiviert wird werden die Accounts wie folgt angelegt:
<?php
/*************************************************
***** Copyright (c) Michael 2019 *****
**************************************************/
$intern = false;
?>
<div class="row">
<div class="col-md-12">
<?php
if ($CP->Loggedin) {
header("Location: ?page=home");
exit;
}
function getFreeNumber() {
global $mySQLcon;
$num = "";
for ($i = 1; $i <= 100; $i++) {
$num = rand(100,999)."555".rand(001,999);
$sqlc = $mySQLcon->query("SELECT * FROM accounts WHERE telNumber='".$mySQLcon->escape_string($num)."';");
if ($sqlc->num_rows < 1) {
break;
}
}
return $num;
}
if (isset($_GET['id']) && isset($_GET['hash'])) {
if (file_exists("tmp/register/".$_GET['id'].".json")) {
$regData = file_get_contents("tmp/register/".$_GET['id'].".json");
$regData = @openssl_decrypt($regData, 'AES-128-CBC', $_GET['hash'], 0, 'uhWa1fTyp7RdbSl9');
if (!empty($regData)) {
$regData = json_decode($regData, true);
$salz = generateRandomString(16);
$gesalzen = strtoupper(hash('sha256', $regData['pass1'].$salz));
$Fields = "";
$Values = "";
foreach ($AccountsInsert as $k => $v) {
$Fields .= $k.", ";
if ($v == "") {
$Values .= "DEFAULT, ";
} else if ($v == "NULL") {
$Values .= "NULL, ";
} else if ($v == "CURRENT_TIMESTAMP()") {
$Values .= "CURRENT_TIMESTAMP(), ";
} else {
$v = str_replace('{USERNAME}', $regData['username'], $v);
$v = str_replace('{BIRTHDATE}', str_pad($regData['bDay'], 2, '0', STR_PAD_LEFT).".".str_pad($regData['bMonth'], 2, '0', STR_PAD_LEFT).".".$regData['bYear'], $v);
$v = str_replace('{BIRTHPLACE}', $regData['bPlace'], $v);
$v = str_replace('{PHONE}', getFreeNumber(), $v);
$v = str_replace('{PASSWORD}', $gesalzen, $v);
$v = str_replace('{SALT}', $salz, $v);
$v = str_replace('{EMAIL}', $regData['email1'], $v);
$v = str_replace('{GENDER}', (($regData['gender']=='m') ? '1' : '2'), $v);
$Values .= "'".$mySQLcon->escape_string($v)."', ";
}
}
$q = "INSERT INTO accounts (".substr($Fields, 0, -2).") VALUES (".substr($Values, 0, -2).");";
$create = $mySQLcon->query($q);
if ($create) {
unlink("tmp/register/".$_GET['id'].".json");
$cookie = "tmp_cookie_".uniqid().".txt";
$form = regCurl(FORUM_URL."/index.php?register®Secret=".FORUM_REG_SECRET, $cookie);
preg_match('/="username" name="(.*?)"/', $form['data'], $w_user);
$w_user = $w_user[1];
preg_match('/="email1" name="(.*?)"/', $form['data'], $w_email1);
$w_email1 = $w_email1[1];
preg_match('/="email2" name="(.*?)"/', $form['data'], $w_email2);
$w_email2 = $w_email2[1];
preg_match('/="pw1" name="(.*?)"/', $form['data'], $w_pw1);
$w_pw1 = $w_pw1[1];
preg_match('/="pw2" name="(.*?)"/', $form['data'], $w_pw2);
$w_pw2 = $w_pw2[1];
preg_match('/="t" value="(.*?)"/', $form['data'], $w_token);
$w_token = $w_token[1];
$postData = array(
$w_user => $regData['username'],
"username" => "",
"email" => "",
$w_email1 => $regData['email1'],
$w_email2 => $regData['email1'],
$w_pw1 => $regData['pass1'],
$w_pw2 => $regData['pass1'],
"t" => $w_token,
);
$register = regCurl(FORUM_URL."/index.php?register®Secret=".FORUM_REG_SECRET, $cookie, http_build_query($postData));
@unlink($cookie);
if (strpos($register['data'], 'Vielen Dank für die Registrierung') !== false) {
echo '<div class="alert alert-success"><b>Dein Account wurde bestätigt! <a href="?page=login">Klicke hier um dich einzuloggen.</a></b></div>';
} else {
echo '<div class="alert alert-danger">Dein Account wurde angelegt und Du kannst dich auf dem Server und in das User-Panel einloggen.<br><b>Es war jedoch aufgrund eines technischen Problems nicht möglich, einen Forum-Account anzulegen. Bitte wende dich an einen Administrator.</b><br><a href="?page=login">Klicke hier um dich ins User-Panel einzuloggen.</a></div>';
}
} else {
echo '<div class="alert alert-danger"><b>Dein Account konnte nicht angelegt werden, bitte kontaktiere einen Administrator und teile ihm folgenden Fehler mit:</b><br>'.$mySQLcon->error.'</div>';
}
} else {
echo '<div class="alert alert-danger"><b>Aktivierungslink ist falsch. Bitte kopiere den gesamten Link aus der E-Mail und rufe ihn in deinem Browser auf.</b></div>';
}
} else {
echo '<div class="alert alert-danger"><b>Dieser Link existiert nicht (mehr). Eventuell wurde dein Account schon aktiviert. Prüfe, ob Du dich einloggen kannst.</b></div>';
}
} else {
echo '<div class="alert alert-danger"><b>Aktivierungslink ist falsch. Bitte kopiere den gesamten Link aus der E-Mail und rufe ihn in deinem Browser auf.</b></div>';
}
?>
</div>
</div>
<?php
function regCurl($url, $cookie=false, $post=false) {
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:1.0) Gecko/20100101 UserPanel/1.0');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
if ($cookie != false) {
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
}
if ($post != false) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$data = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return array("data" => $data, "info" => $info);
}
?>
Display More
Ich entschuldige mich jetzt schonmal das es sehr viel Code ist. Viele würden das auch als eine unprofessionelle Art bezeichnen, aber für uns war die Art und Weise am einfachsten xD
Ich hoffe jemand hat eine Idee woran das liegen kann.
Wie gesagt 5.2.9 hat es noch geklappt aber 5.3.0 plötzlich nicht mehr.