Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> płatności internetowe - podmiana ceny w formularzu ?, czy to bezpieczne?
Janoszczak
post
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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Darti
post
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.
Go to the top of the page
+Quote Post
Janoszczak
post
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?
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
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ą.
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post
Janoszczak
post
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
Go to the top of the page
+Quote Post
jakal
post
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?
Go to the top of the page
+Quote Post
konraddo
post
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:
  1. <form action="https://www.platnosci.pl/paygw/ISO/NewPayment"
  2. method="POST" name="payform">
  3. <input type="hidden" name="pos_id" value="12345">
  4. <input type="hidden" name="session_id" value="1234565">
  5. <input type="hidden" name="amount" value="1000">
  6. <input type="hidden" name="desc" value="Opis płatnosci">
  7. <input type="hidden" name="pay_type" value="t">
  8. <input type="hidden" name="client_ip" value="123.123.123.123">
  9. <input type="hidden" name="js" value="0">
  10. <input type="submit" value="Zapłać poprzez Platnosci.pl">
  11. </form>

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
Go to the top of the page
+Quote Post
Kocurro
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:36