Witam,
w ostatnim czasie próbuje dodać sobie płatności online pewnego polskiego dostawcy.
System działa tak (czyli dokładnie tak jak tu: http://4programmers.net/PHP/Instrukcja_pod%C5%82%C4%85czenia_p%C5%82atno%C5%9Bci_DOTPAY, tylko, że bez sprawdzania w dotpay.php czy nadaje IP serwera):
- z mojej strony trzeba przekierować przeglądarkę użytkownika na stronę dostawcy usługi płatności, według url zawierającego w zmiennych GET takie wartości jak min:
- mój identyfikator (ID),
- kwota transakcji (AMOUNT)
- strona na którą skieruje się użytkownik po dokonaniu przelewu (RET) (np: mojastrona.pl/aktywowano.php)
- strona z którą skomunikuje się serwer dostawcy po udanej transakcji (BACKEND) (np: mojastrona.pl/odbierz_potwierdzenie.php?kod=...)
- podpis, czyli zaszyfrowane md5( kwota + powyższy url + prywatny klucz ) (SIGN)
- Kiedy użytkownik dokona transakcji, system dostawcy wywołuje url (BACKEND), aby potwierdzić że się stało, a użytkownika przekierowuje na link (SIGN) również podany przeze mnie w zmiennych GET
Moje wątpliwości tyczą się bezpieczeństwa tego rozwiązania. W dokumentacji zalecają przesłanie url (BACKEND) ze zmienną GET zawierającą wygenerowany przeze mnie tajny klucz, używając znanego tylko mi prywatnego klucza.
Zastanawiam się, czy bez sprawdzania adresu IP ich serwera, podczas potwierdzania transakcji (czyli tak jak pokazują w dokumentacji), jest to bezpieczne? Wszystkie zmienne i tak przesyłam jawnie dla użytkownika. Może po prostu przeczytać sobie zmienną BACKEND i samemu wywołać zapytanie, które u mnie zostanie odczytane jako dokonanie transakcji. Wydaje mi się, że bez sprawdzania IP nie ma tu bezpieczeństwa.
Co o tym myślicie?