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

ipn-Sicherheitsüberprüfung betriebsbereit?

syuam

Neues Mitglied
hey leute, das hier richtet sich vor allem an paypal-Bezahlsystem-Interessierte:
PHP:
        $errors = array();
        // PAYMENT VALID
                 
        if ($_POST['payment_status'] != 'Completed') { 
            $errors[] .= "Payment not completed";
 
        }
 
        if ($_POST['receiver_email'] != '[email protected]')  {
            $errors[] = "Incorrect seller e-mail";
        }
        if ($_POST['mc_gross'] != '$product_price') {
            $errors[] .= "Incorrect product price";
        }
 
        if ($_POST['mc_currency'] != '$currency_code')  {
            $errors[] .= "Incorrect currency code";
        }
 
        $txn_id = mysqli_real_escape_string($_POST['txn_id']);
 
        $sql = "SELECT COUNT(*) AS count FROM transactions WHERE txn_id = $txn_id";
        $query = mysqli_query($mysqli, $sql);
        $fetch = mysqli_fetch_array($q);
 
        if($fetch['count'] > 0) {
            $errors[] .= “Transaction already processed”;
 
        } else {
            if (count($errors) > 0)  {
 
                // IPN Daten nicht korrekt ! mailer-Klasse einbauen
 
            } else { 
                // txn_id ok, store in database
                $payer_email  = mysqli_real_escape_string($_POST['payer_email']);
                $mc_gross = mysqli_real_escape_string($_POST['mc_gross']);
 
                $insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                      VALUES ('$txn_id','$payer_email','$mc_gross')");
            }
        }
Was haltet ihr von der Vorgehensweise? Würdet ihr was verbessern? Fehlt was? Würde mich sehr über eure Meinung freuen, lg!
 
hallö,

ist das nicht ein vergütet Script aus dem Internet?


wo hast die variable her? $product_price

ansonsten auf den ersten Blick ok.

cheffchen
 
Achja und da sind auch...kann man das syntaxfehler nennen?

Variablen in Hochkommas werden nicht interpretiert sondern nur ausgegeben. Also es wird der Variablenname ausgegeben.

“Transaction already processed”
Dort entweder hochkommas oder Gänsefüßchen
 
Hallo @all,

@syuam:
kann sein das es von hier hast: PHPBuilder - Setting Up PayPal IPN in PHP

@B3nnoX:
genau, kamm mir auch komisch vor.

@bdt600
Wer garantiert, dass die ganzen Post-Variablen gesetzt sind?
PayPal :O)
aber die erste Prüfung fehlt ja wie man oben im Link sieht.

Zu dem IPN generell.
Das system ist ja mit DB aufgesetzt.
Bei sehr kleinenen sachen wo ich sowas selber nutzte mach ich das auch ohne DB und schicke die daten per costum mit und prüfe preis und so dann damit ab. Da es mir das dann egal wenn ein User 2mal Bezahlt :O)

Cheffchen
 
Also vielleicht ist das eine komische Frage, aber wie sieht das mit den Rechten bei sowas aus? Naja ok, es ist ein Beispiel welches frei zugänglich ist, aber darf man das denn trotzdem benutzen? Naja gut, wenn man so denkt würde unsere Branche wohl eher am aussterben sein. Also lassen wir diese Thematik denn doch mal fallen.

Aber was ich noch los werden will, da sind so hammer viele Fehler bzgl. der Hochkommas und Gänsefüßchen drin.
 
ja das script ist teilweise von phpBuilder, habe nur die letzten if-else-Bedingungen ineinander verwurschtelt. ehm Fehler bezüglich der Hochkommas habe ich jetzt nur hier gefunden:
PHP:
$insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                      VALUES ('$txn_id','$payer_email','$mc_gross')");
geändert in:
PHP:
$insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                      VALUES ($txn_id,$payer_email,$mc_gross)");
Wo habt ihr den noch Fehler gefunden? lg
 
Hallo,

@syuam
na das zb
eher

@B3nnoX
der code wurde ja extra geschrieben um das zu verbreiten und ist ja PHP code denn man ja nie zu gesicht bekommt ausser einer möchte das.

Bei HTML/CSS code ist das ja was anderes aber damit der geschutzt ist muss man schon ein gewissen grad an eigenschöpfung hinbekommen was wohl heute recht schwer wird.

Bei Design, Bider und Texte sieht das natürlich ganz anders aus, da erreicht man schnell eine eigenschöpfung und damit ist dies automatisch geschützt.

alles natürlich nur aus weisheiten die man selber erfahren hat, also ohne gewähr :O)

Cheffchen
 
@Cheffchen
Vielen Dank für deine Antwort. Hab mir beinahe schon so etwas gedacht, aber hatte denn noch im Hinterkopf das nirgendwo steht, dass man dies nun so nutzen darf etc
Aber gut du hast natürlich schon recht, dass sind auch so meine Erfahrungen die ich machen durfte.

Und zu diesen Variablen, nimm doch einfach die Gänsefüßchen weg, ich finde sowas sowieso schon schrecklich. Wenn man ein Editor mit Syntaxhighlighting hat, will man auch erkennen, dass es sich um eine Variable handelt. Ich empfinde es schon als schlechten Code wenn man Variablen in Anführungszeichen steckt. Also gewöhn es dir gar nicht erst an.

Und was mir noch aufgefallen ist, was ich persönlich aber nicht weiß. Ich denke das ".=" bei der Wertzuweisung des Arrays kannste auch ändern in "="

Edit: ok das mit ".=" funktioniert. Gerade getestet, aber ob es irgendeinem standard entspricht ist ne zweite Frage. Ich hab es noch nie zuvor gesehen
 
Zuletzt bearbeitet:
@ bdt600, bezüglich meiner Änderung:
PHP:
        if($fetch['count'] > 0) {
            $errors[] .= “Transaction already processed”;
 
        } else {
            if (count($errors) > 0)  {
 
                // IPN Daten nicht korrekt ! mailer-Klasse einbauen
 
            } else { 
                // txn_id ok, store in database
                $payer_email  = mysqli_real_escape_string($_POST['payer_email']);
                $mc_gross = mysqli_real_escape_string($_POST['mc_gross']);
 
                $insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                      VALUES ('$txn_id','$payer_email','$mc_gross')");
            }
        }
Sollte ich es lieber so machen? :
PHP:
        if($fetch['count'] = 0 $$ (count($errors) = 0)) {                // txn_id AND error-count ok => store in database
                $payer_email  = mysqli_real_escape_string($_POST['payer_email']);
                $mc_gross = mysqli_real_escape_string($_POST['mc_gross']);
 
                $insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                      VALUES ('$txn_id','$payer_email','$mc_gross')");
 
        } else {
            error[] .= "txn_id or error-count fail";
        }
Wäre das so gut? by the way: wo siehst du den MAcken in meiner Änderung?
 
PHP:
$insert = mysqli_query($mysqli, "INSERT INTO transactions (txn_id, payer_email, mc_gross) 
                                                  VALUES ('$txn_id','$payer_email','$mc_gross')");
            }
        }
wo siehst du den MAcken in meiner Änderung?
String-Werte gehören zwischen ', Zahlen nicht und Namen von Tabellen und Spalten gehören zwischen Backticks `
 
Zurück
Oben