Kannst mir die Datei gerne mal per Email schicken: gremlincomputer [at] gmx.de
Kannst mir die Datei gerne mal per Email schicken: gremlincomputer [at] gmx.de
Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!
Hallo,
@cdp, hast du ICQ? Wenn ja gib mir doch bitte mal deine Nummer per PN, müsste unbedingt mal mit dir quatschen!
Diese Sicherheitslückengeschichte nimmt doch ein grösseres Ausmass an!!
LG Laemmi
Was mich jetzt noch interessieren würde ist wie die manipuierten Spiele in der Datenbank unter vms_buchungen auftauchen. Da müsste ja wenn mit negativem Einsatz oder mit einem Einsatz von 0 entweder eine Positive Buchung mit dem Verwendungszeck %Einsatz oder eben eine Buchung von 0,00 auftauchen. So sollte man doch nachvollziehen können ob gefakt wurde oder nicht, oder lässt sich der DB Eintrag auch manipulieren?
soweit ich weis kann man die buchungen nicht manipulieren (gott sei dank!)
ich hab dank mithilfe von laemmi ein paar lücken schließen können hoffe meine slots sind nun alle sicher
Ich versuche hier mal, das Problem bzw. die Problemlösung allgemeingültig zu beschreiben:
1. bei den Slots: der Wert, der mit $_POST['wert'] (für Wert steht oft einsatz) ist zu prüfen.
Wenn der Befehlt $variable = (int)$_POST['wert']; vorhanden ist, seid ihr zunächst insofern auf der sicheren Seite, dass nicht mit negativen Werten gespielt werden kann --> das wäre wirklich fatal, weil sich die user bereichern könnten.
2. und das ist das was Laemmi am meißten findet, ist die Tatsache, dass man mit Werten spielen kann, die nicht eingetragen sind.
Dieses Problem behebt man, indem man die zulässigen Einsätze in ein array einliest, was sie schon oft sind und dann eine Abfrage einbaut:
Beispiel aus safari:
3. ZechenPHP-Code:
if ( in_array($_POST["einsatz"],$einsatz) ) {
$preis = $_POST["einsatz"];
} else {echo "&result=ist das erlaubt?&";}
bei den Zechen ist es so, dass weder der Wert gesichert wird durch die (int), noch gefragt wird, ob der Einsatz gültig ist.
Am Beispiel der Einzelzeche hier die Lösung:
nach <? userstatus();
einfügen:
nach if ($spielen) {PHP-Code:
$zechen = mysql_query("SELECT * FROM einzelzeche ORDER BY zeche");
while($zwert = mysql_fetch_array($zechen)) {
$pattern[] = $zwert['zeche'];
}
einfügen:
vor print <<<EOT seht ihrPHP-Code:
if ( in_array($spielen,$pattern) ) {
dazwischen einfügen:PHP-Code:
}
}
Das war's. Das könnt ihr leicht auch in jeder anderen Zeche einfügen, ihr müßt nur den Tabellennamen austauschen.PHP-Code:
} else {$zechemeldung = "<b><font color=\"red\"><center>Keine faulen Tricks!</b></font></center><br />";}
mfg
dragon11
Hallo,
@dragon11, Danke für die Mühe die du dir gemacht hast.
Eine Lösung für den Safari wäre auch (Danke an Parl und Didith1207) :
unter:
dieses einfügen:$einsatz = intval($_POST["einsatz"]);
Natürlich die Zahlen an die Einsätze anpassen die ihr bei eurem Safari habt.if ($einsatz != 1000 && $einsatz != 2500 && $einsatz != 5000 && $einsatz != 10000 && $einsatz != 25000 && $einsatz != 50000) die("&result=Fehlerhafter Einsatz&");
Dies lässt sich analog dann auch für andere Games anwenden, die feste Einsätze haben.
Bei Games die einen variablen Spieleinsatz haben könnt ihr folgendes verwenden:
Dabei natürlich wieder die Zahlen an euer Game anpassen.if ($einsatz < 1000 or $einsatz > 100000) {
die();
}
Mit diesen 2 Methoden verhindert ihr das irgendwelche Spinner mit falschen Einsätzen an euren Games spielen.
Ich hab die letzten 2 Tage viele Games getestet und kann euch sagen es sind wirklich einige Games betroffen wo Abzockern Tür und Tor offensteht!
LG Laemmi
Bei solchen groben Sachen könnte man sogar noch einen Schritt weitergehen und den Account des Users automatisch sperren mit entsprechendem Hinweistext z.B.
"[11.10.2008 - 15:35] Faken in der Zeche (Einsatz manipuliert)"
So mach ich das bei mir weil den Einsatz kann man in der Regel nicht ausversehen manipulieren und so schützt man sich direkt davor.
PHP-Code:
$sperrgrund = '['.date("d.m.Y - H:i").'] Faken in der Zeche (Einsatz manipuliert)';
db_query('UPDATE '.$db_prefix.'_kontodaten SET status=3, hinweis="'.$sperrgrund.'" WHERE uid='.$_SESSION['uid'].' LIMIT 1');
Gruß
cdp
Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!
@Laemmi, meine gepostete Antwort ist richtig,
wie ich sagte, müssen die Einsätze in einem array sein.
Im Moment passiert nix, das ist auch richtig so.
Die Lösung von gremlin kommt erst rein, wenn es getestet ist.
Die Lösung die du anbietest ist auch richtig, aber viel zu umständlich, man kann die Einsätze bei vielen Spielen im Admin verändern, wer dann nicht daran denkt, auch in der _game.php zu ändern, wundert sich dann warum er soviele Faker hat.
mfg
dragon11
lol. ja das wäre doof ^^
wegen dem automatischen sperren.
wie genau binde ich das ein ?
Beispiel beim Safari-Slot (den entbugge ich gerade)
wäre nett wenn du mir das in dem php-code gleich einbauen könntestPHP-Code:
session_start();
$einsatz = intval($_POST["einsatz"]);
if ($einsatz != 25000 && $einsatz != 50000 && $einsatz != 100000 && $einsatz != 250000 && $einsatz != 500000 && $einsatz != 1000000) die("&result=Fehlerhafter Einsatz&");
Status:
Deine Artikel in meinem LoseShop ? -> PN genügt
Was kann man eigentlich nun mei solchen Addons machen, bei denen man Text eingeben kann und in einer DB gespeichert wird, damit dort keine SQL Injections ein gefügt werden können oder das man keine Daten aus der DB auslesen kann?