![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 2.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
tworzę sklep internetowy i przeglądając zasady działania systemów płatności zdiwił mnei fakt iż wszędzie operacja polega na przesłaniu formularza metodą POST. W przeglądarkach FireFox dostępne są wtyczki umożliwiające wyświetlenie zmiennych POST i podmianę ich zawartości. Dlatego zwracam się z pytaniem, czy np taki "sprrytny" klient nie może przed potwierdzeniem wysłania formularza submitem, podmienić sobie zamówienia za 150zł na np. 130? Prosze o wyjasnienie jak to jest dokladnie? Moze cos zle pojmuje ? Z gory dziekuje za pomoc Pozdrawiam ;] (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 076 Pomógł: 62 Dołączył: 6.03.2005 Skąd: Wroc Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli jest tak napisany skrypt, że cenę produktu pobiera z bazy tylko raz a potem przesyła formularzem przez POST lub GET czy inny REQUEST to faktycznie możliwe byłoby podmienienie tej wartości. Pisząc jednak taki system istnieje zasada maksymalnej nieufności w stosunku do uzytkownika i tam, gdzie to możliwe korzysta się z własnych danych, tak więc na następnej stronie sprawdza się znowu cenę w bazie danych na podstawie przesłanego przez formularz id produktu.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 2.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem twoja odpowiedź, jednak jest pewien mankament, albowiem taki formularz wygląda dla platnosci.pl np tak:
<form action="https://www.platnosci.pl/paygw/ISO/NewPayment" method="POST" name="payform"> <input type="hidden" name="pos_id" value="12345"> <input type="hidden" name="session_id" value="1234565"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="desc" value="Opis płatnosci"> <input type="hidden" name="pay_type" value="t"> <input type="hidden" name="client_ip" value="123.123.123.123"> <input type="hidden" name="js" value="0"> <input type="submit" value="Zapłać poprzez Platnosci.pl"> </form> Jak widać formularz przekierowywany jest do platnosci.pl gdzie nie mamy mozliwosci pobrania i sprawdzenia naszej ceny z bazy, albowiem to nie nasz serwer. Natomiast w pozniejszej odpowiedzi zwrotnej z platnosci.pl ktorej celem jest weryfikacja zakupu nie otrzymujemy wartosci "amount" czyli ceny ktora wyslalismy w 1 zadaniu. Jednymi slowy, klient przed kliknieciem submita "Zapłać poprzez Platnosci.pl", podmieni wartosc amount POSTa i wysle ządanie bezpośrednio do platnosci.pl. Widzialem jeszcze dopisanie po tym formularzu opcji: <script language="JavaScript" type="text/javascript"> <!-- document.forms['payform'].js.value=1; --> </script> jednak nie znam sie za bardzo na JS i moze ktos moglby wyjasnic do czego ten JS sluzy? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 12.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
poczytaj dokładnie tą dokumentacje techniczną
Wydaje mi się że użytkownik może wpłacić dowolną kwotę. Twój sklep musi pobrać informacje o transakcji jeśli się odbyła (3.7.2.), sprawdzić czy wpłacono odpowiednią kwotę i oznaczyć sobie jako transakcje dokonaną. |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Ewentualnie spróbuj wysłac skrypt najpierw do siebie, sprawdź dane i potem cURL'em tuneluj do platnosci.pl
Pozdrawiam. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 2.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
"poczytaj dokładnie tą dokumentacje techniczną
Wydaje mi się że użytkownik może wpłacić dowolną kwotę. Twój sklep musi pobrać informacje o transakcji jeśli się odbyła (3.7.2.), sprawdzić czy wpłacono odpowiednią kwotę i oznaczyć sobie jako transakcje dokonaną." Otoz wlasnie platnosci.pl zwracja na podany url tylko: pos id - identyfikator Punktu Płatności session_id - wartość podana przez Sklep w trakcie tworzenia nowej transakcji ts - znacznik czasowy, wartość potrzebna w celu weryfikacji podpisu (czas w formacie UNIX TIMESTAMP) sig - podpis przesłanej informacji - patrz punkt 3.4 Dokumentacji technicznej Nie widzę tutaj żadnej informacji i kwocie jaką przeslana zostala w 1 formularzu. Więc jak to sprawdzić? Jedynym sensownym rozwiązaniem byłoby przesłanie formularza nie do platnosci.pl lecz do swojego skryptu, ktory z sesji odczytalby czy uprzednio zapisana wartosc zamowienia pokrywa sie z ta z formularza, a nastepnie automatycznie przeslal formularz dalej do platnosci.pl. Jednak jak utworzyc formularz bez pola submit i spowodowac aby byl przesylany automatycznie pod wskazany url? Moze przedstawie to w krokach: 1) user w koszyku klika zamow 2) skrypt oblicza koncowa wartosc zamowienia, zapisuje sa w sesji i tworzy formularz taki jak w platnosciach lecz a innym urlem (naszego innego skryptu) 3) nasz skrypt sprawdza wartosc kwoty (czy ta z sesji pokrywa sie z ta z formularza) if (tak) -> automatycznie wysyla forma juz pod prawidlowy adres platnosci.pl if(NIE) -> wyswietla userowi informacje ze wystapil blad bo kwota sie nie zgadza i zeby user sobie w kulki nie lecial nastepnym razem bo jestesmy super pro hackers i nie z nami takie numery (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif) (chyba mnie ponioslo) ;] 4) dalej tranzakcja przebiega normalnie Co o tym myslicie? Chyba dobre rozwiazanie? Tylko jak spostowac dane automatycznie ;] PS. A co do Curla to jest to pomysl, jednak wolalbym go obejsc ;] Pozdrawiam i dziekuje za kolejne komentarze ;] Ten post edytował Janoszczak 21.07.2007, 16:22:44 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 11.01.2004 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Pewnie mój post dużo nie wniesie, ale jestem ciekaw rozwiązania tego problemu, bo też za niedługi czas będę integrował stronę z platnosci.pl
- Może wyślesz meila do działu technicznego platnosci.pl i spytasz się o rozwiązania? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 1 Dołączył: 9.01.2007 Skąd: Sejny/Elbląg Ostrzeżenie: (0%) ![]() ![]() |
Z tego co wywnioskowalem z dokumentacji to:
Przed wysłaniem do płatnosci.pl ustalasz wlasny session_id, ktory razem z innymi danymi zwiazanymi z transakcja zapisujesz w bazie (np. na stronie podsumowania), gdzie na dole zamieszczasz ten formularz:
potem kiedy platnosci.pl zwroci ci dane: pos id - identyfikator Punktu Płatności session_id - wartość podana przez Sklep w trakcie tworzenia nowej transakcji ts - znacznik czasowy, wartość potrzebna w celu weryfikacji podpisu (czas w formacie UNIX TIMESTAMP) sig - podpis przesłanej informacji - patrz punkt 3.4 Dokumentacji technicznej sprawdzasz za pomocą session_id oraz danych transakcji w bazie, ktore wczesniej tam umiesciles czy dane są poprawne jesli nie anulujesz transakcje, jak to jest napisane w dokumentacji: W celu anulowania lub odrzucenia płatnosci wywołujemy procedure Payment/cancel. ale jak to sie robi to dokładnie to nie wiem Ten post edytował konraddo 27.11.2007, 11:53:48 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzenie tego czy klient wpłacił odpowiednią sumę należy do Ciebie.
Po otrzymaniu callback'a z informacją o dokonaniu płatności Twój skrypt musi sprawdzić czy sess_id jest poprawny. Jeśli tak to wypytujesz serwis płatności o informacje na temat transakcji (podając pos_id, sess_id i key), dostajesz informacje. Sprawdzasz. Reagujesz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:36 |