So übertragen Sie Kreditkarteninformationen sicher zwischen Seiten in PHP

7

Wie übertragen Sie sicher Kreditkarteninformationen zwischen Seiten in PHP? Ich erstelle eine E-Commerce-Anwendung und möchte, dass die Benutzer die Kasse folgendermaßen durchlaufen:

Informationen eingeben - & gt; Überprüfung - & gt; Bestellung abschließen

Problem ist, dass ich nicht sicher bin, wie ich Kreditinformationen von dem Zeitpunkt an, zu dem der Benutzer sie eingibt, sicher übergebe, wenn ich sie verarbeite (im Schritt "Bestellung abschließen"). Ich habe gehört, dass die Verwendung von Sitzungen unsicher ist, sogar mit Verschlüsselung.

Jede Hilfe wäre willkommen!

    
Alex 28.03.2010, 03:05
quelle

6 Antworten

10

Ich würde es nirgendwo speichern. Es ist zu viel Risiko und wahrscheinlich nicht ethisch.

Senden Sie eine Anfrage an das Zahlungsgateway, indem Sie ein Formular über https senden und speichern Sie nur das Ergebnis der Transaktion.

Sie interessieren sich wahrscheinlich nur, wenn die Transaktion genehmigt oder abgelehnt wurde. Wen kümmert es, was die Nummer ist?

    
Rimian 28.03.2010 03:23
quelle
8

Speichern Sie die Kreditkarteninformationen nicht in der Sitzung, speichern Sie sie nicht in einer Datenbank, speichern Sie sie nicht in einer Datei. Schreiben Sie stattdessen die cc-Informationen in eine versteckte html-Eingabe zurück auf die Überprüfungsseite.

Der Programmablauf würde also so funktionieren:

  1. Der Benutzer sendet Zahlungs- und Rechnungsinformationen über ein HTML-Formular an den Server.
  2. Der Server überprüft, ob diese Informationen im richtigen Format vorliegen (d. h., die Kreditkarte hat die entsprechende Anzahl von Ziffern, eine Rechnungsadresse wurde eingegeben usw.)
  3. Nach der Überprüfung schreibt der Server alle Informationen zurück, die als Eingabefelder für verborgene Formulare übermittelt wurden. Dazu gehören Rechnungsadresse, Lieferadresse und Kreditkarteninformationen.
  4. Das Formular auf der Überprüfungsseite (mit den ausgeblendeten Eingabefeldern) hat eine Schaltfläche mit der Bezeichnung "Bestellung abschließen" / "Bestellung abschließen". Dieses Review-Formular wird im Skript zum Finalisieren der Bestellung veröffentlicht.
  5. Das finalize-Skript speichert Abrechnungs- / Versandinformationen in Ihrer Datenbank und übermittelt die Kreditkarteninformationen an Ihr Zahlungsgateway.

Die Vorteile dieser Methode sind zweifach:

  1. Sie sparen den Overhead und die Kosten zusätzlicher PCI-Compliance, die beim Speichern von Kreditdaten erforderlich sind.
  2. Diese Methode bleibt innerhalb der Sicherheitsgrenzen des SSL-Protokolls. Das bedeutet, verschlüsselte Kreditkartendaten müssen in jedem Fall an Ihren Server gesendet werden - diese Methode basiert weiterhin ausschließlich auf der Wirksamkeit von SSL, ohne die Komplexität der persistenten Kreditkartendaten einzuführen.

Dieser letzte Punkt wirft ein anderes Problem auf: Indem Sie eine Überprüfungsseite haben, verdoppeln Sie die Anzahl, wie oft die verschlüsselten Kreditkartendaten über das Netzwerk übertragen werden. Bei dieser Methode gibt es mindestens 4 Übertragungen: Client zu Server, Server zu Client, Client zu Server (wieder), dann Server zu Gateway. Ohne Überprüfung gibt es mindestens zwei Übertragungen: Client zu Server und Server zu Gateway. Ist der Komfort einer Überprüfungsseite das Risiko zusätzlicher Übertragungen wert? Das ist eine Entscheidung, die Sie als Webentwickler (und Ihr Kunde) treffen müssen.

    
leepowers 28.03.2010 05:53
quelle
1

Zuerst sollten Sie das HTTPS-Protokoll verwenden, um sicherzustellen, dass die Verbindung verschlüsselt ist.

Danach können Sie die Daten in% super-global $_SESSION speichern. Die Daten werden auf Ihren Servern gespeichert und sind daher relativ sicher.

Sie könnten eine ähnliche Technik verwenden, bei der Sie die Informationen in eine Order-Datenbank einfügen, wobei der Schlüssel eine GUID oder etwas anderes ist, das ziemlich zufällig und eindeutig ist. Wenn die Person dann ihre Bestellung ändert / überprüft, sollte die Bestell-ID im GET-Teil der URL gespeichert sein (oder wenn Sie paranoid sind, eine Cookie- / Sitzungsvariable):

%Vor%

Um zusätzliche Sicherheit zu bieten, können Sie auch eine IP-Adresse in der Auftragstabelle speichern und sicherstellen, dass die IP und die Auftrags-ID übereinstimmen.

    
Tyler Carter 28.03.2010 03:08
quelle
1

Eine Alternative ist die Verwendung eines Zahlungsprofil-Dienstes wie den Customer Information Manager von Authorize.net (dort sind andere auch). Sie speichern die Zahlungsinformationen in einem Profil über ihre API und verwenden dann die Profil-ID, wenn Sie die Karte tatsächlich aufladen. Auf diese Weise speichern Sie niemals die Daten auf Ihren Servern.

    
John Sheehan 25.06.2010 23:14
quelle
0

Nicht mein Fachgebiet, aber ich denke, Sie möchten es in einer Sitzung speichern, aber auch ein "Synchro-Token" (oder wie auch immer die Kinder es heute nennen) verwenden, um CSRF-Angriffe zu vermeiden.

Natürlich möchten Sie https (richtig) verwenden, indem Sie sensible Daten in den URL- und versteckten Feldern vermeiden und vermeiden, dass sehr sensible Informationen in irgendeiner Antwort usw. gesetzt werden.

    
Tom Hawtin - tackline 28.03.2010 03:12
quelle
0

Ich denke, ich muss zustimmen. Das Speichern von Kreditkartennummern ist ein zu großes Risiko und die Konsequenzen könnten weit hergeholt sein.

Der ideale Weg wäre, die Informationen an einen Prozessor eines Drittanbieters weiterzuleiten und einfach das Ergebnis zu verwenden, um die Skriptlogik zu formen.

%Vor%

Ich hoffe, Sie bekommen den Punkt ...:)

    
Athrylith 25.06.2010 23:07
quelle