So liebe Leute.
Heute waren von unserem EF eineige Lose verschwunden. Dabei haben wir einen noch nicht gefixten BUG im VMS gefunden. Hier wollte ich euch hinterlegen wie ihr euch schützen könnt.
Folgendes Szenario. Ein User überlastet eure Datenbank so lange bis sie im Lockstatus hängen bleibt. Ab diesem Moment lässt er sich Lose auszahlen. Er bekommt sie ausbezahlt, aber ihm wird nichts vom VMS abgebucht.
Die Folge ist die, dass er seinen Kontostand xbelibig mal auszahlen kann, ohne, dass ihm irgend was abgebucht wird. Also so lange bis euer EF leer ist.
Umd das zu verhindern, müsst ihr den Lockstatus überprüfen.
Beispiel Auszahlung.php
Bugfix:
direkt nach folgender Zeilen:
folgenden Code anfügen:
Den gleichen Code in der Einzahlung nachfixen. Das macht euch nicht arm, aber spart euch Ärger.
Beispiel Einzahlung.php
Bugfix:
direkt nach:
vorherigen code einfügen!
Nun kann euer Hacker eure DB überlasten wie er mag. Aber ist ein Update nicht mehr möglich, verschwinden euch keine Lose mehr.
Übrigens dieser Bug ist auch in anderen Scripten möglich wie FWX etc. Auch dort sollte man die Sicherheitsbeschreibung prüfen.
Heute waren von unserem EF eineige Lose verschwunden. Dabei haben wir einen noch nicht gefixten BUG im VMS gefunden. Hier wollte ich euch hinterlegen wie ihr euch schützen könnt.
Folgendes Szenario. Ein User überlastet eure Datenbank so lange bis sie im Lockstatus hängen bleibt. Ab diesem Moment lässt er sich Lose auszahlen. Er bekommt sie ausbezahlt, aber ihm wird nichts vom VMS abgebucht.
Die Folge ist die, dass er seinen Kontostand xbelibig mal auszahlen kann, ohne, dass ihm irgend was abgebucht wird. Also so lange bis euer EF leer ist.
Umd das zu verhindern, müsst ihr den Lockstatus überprüfen.
Beispiel Auszahlung.php
Bugfix:
direkt nach folgender Zeilen:
PHP:
// Variabeln definieren
if (!isset($_POST['auszahlen'])) $_POST['auszahlen'] = "";
if (!isset($_POST['uid_passwort'])) $_POST['uid_passwort'] = "";
if (!isset($_POST['trans_menge'])) $_POST['trans_menge'] = "";
if (!isset($auszahlmeldung)) $auszahlmeldung = "";
folgenden Code anfügen:
PHP:
//-----> Sicherheitsbeschreibung auf die Datenbank
$kontodaten = mysql_fetch_array(db_query("SELECT `kontostand` FROM ".$db_prefix."_kontodaten WHERE uid=".$_SESSION['uid']." LIMIT 1"));
@mysql_query("UPDATE ".$db_prefix."_kontodaten SET kontostand = kontostand - '1' WHERE uid='".$_SESSION['uid']."' LIMIT 1");
$kontodaten2 = mysql_fetch_array(db_query("SELECT `kontostand` FROM ".$db_prefix."_kontodaten WHERE uid=".$_SESSION['uid']." LIMIT 1"));
if ($kontodaten['kontostand'] != ($kontodaten2['kontostand'] + 1))
{
die('FEHLER BEI DER SICHERHEITSBESCHREIBUNG');
exit;
}
else
{
@mysql_query("UPDATE ".$db_prefix."_kontodaten SET kontostand = kontostand + '1' WHERE uid=".$_SESSION['uid']." LIMIT 1");
unset($kontodaten,$kontodaten2);
}
Den gleichen Code in der Einzahlung nachfixen. Das macht euch nicht arm, aber spart euch Ärger.
Beispiel Einzahlung.php
Bugfix:
direkt nach:
PHP:
// Variabeln definieren
if (!isset($_POST['einzahlen'])) $_POST['einzahlen'] = "";
if (!isset($_POST['uid_passwort'])) $_POST['uid_passwort'] = "";
if (!isset($_POST['trans_menge'])) $_POST['trans_menge'] = "";
if (!isset($einzahlmeldung)) $einzahlmeldung = "";
vorherigen code einfügen!
Nun kann euer Hacker eure DB überlasten wie er mag. Aber ist ein Update nicht mehr möglich, verschwinden euch keine Lose mehr.
Übrigens dieser Bug ist auch in anderen Scripten möglich wie FWX etc. Auch dort sollte man die Sicherheitsbeschreibung prüfen.
Zuletzt bearbeitet: