2010-02-16 16 views
5

W kroku 3 mam formularz, który akceptuje kartę kredytową, Krok 4 ponownie drukuje informacje, w tym 4 ostatnie cyfry numeru karty kredytowej, a krok 5 Muszę znać pełne CC#, aby go przetworzyć i przesłać przez moje połączenie https z zewnętrznym dostawcą - czy powinienem go przechowywać przez ukryte wejścia lub $_SESSION, aby móc uzyskać do niego dostęp między trzecim a piątym krokiem?Najbezpieczniejszy sposób na podanie numeru karty kredytowej za pomocą wieloetapowego formularza?

FYI: Moja cała witryna jest już https.

Odpowiedz

9

Podaj numer karty kredytowej jako ostatni krok, aby go nie przechowywać. Istnieje wiele problemów prawnych związanych z przechowywaniem tych informacji.

+0

Cóż, problem z tym, że klient już zdecydował się na uporządkowanie kroków formularza, byłoby naprawdę kłopotliwe i prawdopodobnie poza moim zasięgiem wpłynęłoby na to. –

+2

Możesz zachować ten przepływ pracy za pomocą Braintree. Na trzecim kroku możesz zapisać kartę kredytową w skarbcu karty kredytowej Braintree. Braintree dostarczy ci token, za który będziesz mógł później obciążyć kartę kredytową. Możesz pobrać zamaskowany numer karty kredytowej w 4. kroku, aby wyświetlić go użytkownikowi w celu potwierdzenia. A następnie, aby naładować kartę kredytową, wykonaj wywołanie API w 5. kroku, używając tokena z kroku 3. Braintree może wyeliminować zarówno przechowywanie, jak i przesyłanie danych karty kredytowej z twojego środowiska. getbraintree.com Ujawnienie: Pracuję dla Braineree. –

0

w żaden sposób. powinieneś go przechowywać (w jakiś sposób) zaszyfrować na serwerze.

+0

Zobacz moją edycję, która jest SSL'd - wystarczająco dobra? –

+0

Nie, SSL nie jest zdecydowanie wystarczający. –

+0

Zdecydowanie nie - SSL szyfruje tylko kanał. Powinien być przechowywany w postaci zaszyfrowanej, nawet jeśli jest przechowywany w ogóle, co prawdopodobnie nie powinno być. – thetaiko

1

Nie przechowuj go w ogóle. Istnieje wiele zakładów przetwarzania kart kredytowych. O ile absolutnie nie musisz mieć tej funkcji w domu, nie rób tego.

Poważnie, nie spiesz się wybierać.

+0

Jak pobierać opłaty, jeśli nie mogę go zapisać? Przez sklep mam na myśli strony, nie w bazie danych ani nic. –

+0

Nie można go naładować. Przekazujesz odpowiedzialność za zabezpieczenie i obciążenie karty usługą, która robi to za ciebie. Przede wszystkim mają opcje wysyłania zaszyfrowanych danych do ich witryny w celu przetworzenia. Następnie zwracają wynik ładowania z powrotem do Twojej witryny. –

+0

Właściwie powinienem przeformułować, że - ja * przekazuję je innej usłudze, nie ładuję ręcznie CC własnym kodem, jest to dostawca zewnętrzny, ale kod dostarczający CC DO dostawcy zewnętrznego jest na piątym/ostatnim kroku i wchodzę do CC na trzecim stopniu. –

2

SSL nie chroni danych przechowywanych na dysku. Ponadto dane sesji PHP są domyślnie przechowywane w systemie plików w katalogu tymczasowym z minimalnymi uprawnieniami. Tak więc dane są przechowywane nie tylko w postaci zwykłego tekstu, ale także dla wielu różnych użytkowników systemu (w zależności od konfiguracji serwera WWW).

Jeśli chcesz wdrożyć wieloetapowy proces realizacji transakcji, sugeruję wykonanie magii AJAX/Javascript po stronie przeglądarki. Możesz zbierać informacje rozliczeniowe za pomocą serii DIV, które są ukryte/zwinięte i opublikować pełny zestaw danych za jednym razem, przesyłając dane CC jednorazowo do serwera, który następnie przekazuje dane CC do procesora płatności.

+1

Ale w jaki sposób można obsługiwać przetwarzanie po stronie serwera, jeśli JS jest wyłączony? –

+0

Dla użytkowników innych niż javascript: 1) rozwiązanie opisane przez odpowiedź Chrisa lub 2) wysłać wiadomość potwierdzającą z informacją CC w ukrytym polu z powrotem do użytkownika. Druga opcja może powodować problemy, jeśli strona jest buforowana przez przeglądarkę lub serwer proxy. – leepowers

+0

Jeśli chcesz, aby był całkowicie zżelowany, czy możesz szczegółowo opisać, czy nadal pozostawiasz logikę POST/SESSION na poszczególnych stronach kroku? –

2

Zdecydowanie nie w ukrytym polu formularza. Jeśli użytkownik odchodzi lub zapisuje stronę lub ktoś uderza w przycisk Wstecz, dostępne są pełne informacje CC. Komputer może być współdzielony z innymi.

Jeśli utrzymujesz CC na dysku/bazie danych, to CC musi być zaszyfrowane, w przeciwnym razie naruszysz wymagania dotyczące kart płatniczych (PCI). Możesz zachować cztery ostatnie cyfry w pustym miejscu dla wygody.

Uwaga: jeśli korzystasz z sesji (z innych powodów), musisz zadbać o ataki na sesję, w tym, ale nie ograniczając się do naprawy sesji.

Jedną z innych możliwości jest przerobienie strony klienta tak, że różne kroki to tylko wywołania ajaxowe (cc jest w zmiennej js nie w polu formularza) i użycie CSS do wyświetlenia/ukrycia różnych elementów div - w ostatnim kroku opublikuj całość informacje na twój serwer.

+0

W jaki sposób korzystanie z ukrytych elementów div różni się od używania ukrytych pól? – afilina

Powiązane problemy