• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Wo kommt die $_SESSION['xxx'] her?

Tobi44

Mitglied
Hallo,

ich habe eine wohl ziemlich doofe Frage.

Man hat mir vor einiger Zeit (2+ Jahre) mal ein Script erstellt, mit welchem die Zahlungsabwicklung mit einem Zahlungsprovider stattfindet. Das funktioniert auch problemlos und ist wohl auch gegen Manipulation geschützt.

Derzeit arbeite ich an dieser Website und stelle mir die Frage, wie dieses Script eigentlich funktioniert. Und ich komme nicht dahinter. Alles, was nicht selbst gemacht, für mich Dummerchen oft nicht nachvollziehbar...

Es wird also eine URL mit Parametern vom Benutzer aufgerufen, welche den Zahlungsprozess einleitet. Der Zahlungsprovider greift dann auf eine Datei zu, welche in meine Datenbank die entsprechenden Werte einträgt, z. B. den Artikelnamen, den Betrag und einen Authkey.
Für den Zahlungsprovider ist die Zahlung somit abgeschlossen, mein Script führt nun die weitere Bearbeitung der Bestellung durch. Bevor dies geschieht, hat mein Programmierer jedoch eine weitere Prüfung eingebaut, die verhindert, dass man z. B. beim Bezahlvorgang mittels veränderter Parameter bzw. Werte einen geringeren Betrag auswählen kann.

Das funktioniert auch, testen kann ich das insbesondere wenn ich den Zahlungsvorgang z. B. auf sofort.com abbreche und auf meine Seite zurückgeleitet werde. Mein Script speichert im Log mit der Abbruchmeldung den "echten, wahren Betrag" und den in der Zahlung verwendeten (ggf. manipulierten) Betrag.

Für diese Prüfung, die nach der erfolgten Zahlung unmittelbar vor der Freischaltung der Bestellung meinerseits stattfindet, hat man folgendes Szenario verwendet:

$betrag = $_GET['amount'] - also wohl das, was vorher vom User per Klick auf den Button per GET-Parameter an den Paymentprovider übermittelt wurde und nach dessen Zahlungsbestätigung wieder an mein Script zurückgesendet wird - und somit einen manipulierten Betrag enthalten könnte

$_SESSION['betrag'] - welches wohl den echten Betrag enthält und zur Gegenprüfung vor der Freischaltung der Bestellung verwendet wird. Leider kenne ich mich mit PHP sessions nicht aus und finde in allen mit diesem Script im Zusammenhang stehenden Dateien / Prozessen keinen Hinweis, wo bzw. wie diese Variable gefüllt wird bzw. herkommt.

PHP:
if ( [...] AND $betrag == $_SESSION['betrag'] AND [...] ) {
    # successful
} else {
    # irgendwas stimmt nicht, Kunden kontaktieren und zur Sau machen :-P
}

Ich habe keine Zweifel an der Sicherheit dieses Scriptes, möchte aber gerne vor allem wissen, wo das "session betrag" herkommt. Vielleicht hat jemand eine Idee.

Danke
 
Werbung:
Sessions werden dafür genutzt, Variablen zu speichern, auf die auch in einem anderen PHP Skript zugegriffen werden kann. Du kannst also in 1.php definieren: $_SESSION['blubb'] = 1
Und in 2.php echo $_SESSION['blubb'] ausführen. Du wirst sehen, dass dir in Skript 2 eine '1' ausgegeben wird.
Damit das funktioniert muss aber in beiden Skripten irgendwo vorher session_start(); angegeben sein.

In deinem speziellen Fall wird, wenn du auf 'Zahlen' klickst vermutlich eine Session mit deinem Betrag gesetzt und in dem Skript, das du gerade vor dir hast wird eben diese Session wieder abgerufen.
Schau gerne mal in die PHP Datei, die die eigentliche Zahlung "auslöst".
 
Hallo,

danke für Deine Antwort.

Ich habe mir nun nochmal die Datei vorgenommen, auf der der Käufer die Zahlung einleiten kann und auf die er auch wieder zurückgeleitet wird - im Erfolgs- wie Fehlerfall. Also die alles entscheidende Datei wenn es um die Ausführung der Zahlung und der Bestellung geht.

In ihr ist tatsächlich die $_SESSION['betrag'] definiert - fein säuberlich der finale Checkout-Betrag inkl. aller möglichen Gutscheine und Rabatte. Zudem noch meine eindeutige Bestell-ID. Allerdings so weit unten, dass ich das bisher einfach nicht gefunden habe.

Führt der User also eine Bestellung mit manipulierter URL aus, um z. B. seinen persönlichen Wunschbetrag zu zahlen, wird er zwar sein Geld los, empfängt aber keine freundliche Bestellbestätigung auf meiner Webseite, da bei der oben genannten Prüfung der Betrag nicht mit dem vom Zahlungsdienstleister zurückbestätigten Betrag übereinstimmt.

Hach .... :D

Danke & Gruß
 
Werbung:
Zurück
Oben