Mollie webhook call bij lokaal development

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Rob Doemaarwat

Rob Doemaarwat

24/09/2017 14:08:00
Quote Anchor link
Dag Ward,

De callback loopt bij Mollie sowieso van server naar server. Maar het staat 'een ander' natuurlijk vrij om de server ook via diezelfde achterdeur aan te pesten. Dat wil je voorkomen. Dat gebeurt dus 1) al omdat je zelf de payment gegevens bij Mollie ophaalt (dus iemand kan op de achterdeur kloppen met wat ie wilt, je haalt zelf de gegevens op, dus dat valt niet te faken), en 2) voor de zekerheid geef je nog een hash mee die ze niet weten + niet kunnen gokken.

Bij Sisow staat wel alle info in redir / client URL, en die wordt daar beveiligd door een hash mee te geven. Die hash gaat over alle data in de URL (id, status, enz) *en* nog een secret dat niet in de URL staat (maar wel aan beide zijde bekend is). Door deze hash dus na te rekenen kun je achterhalen of er met de URL geklooid is (= dus ook veilig).
 
PHP hulp

PHP hulp

25/04/2024 03:52:37
 
Wesley Rijnders

Wesley Rijnders

24/09/2017 15:19:27
Quote Anchor link
Ward van der Put op 24/09/2017 12:38:16:
Je wilt sowieso niet de client een rol van betekenis geven. De callback met statusupdate moet daarom van server naar server lopen, niet via de client. Zolang je dat niet goed doet en de client-URL's gaat "beveiligen", tussen aanhalingstekens, heb je een tweederangs oplossing.


Je kan prima de client een GET laten doen en daar de check op uitvoeren hoor, je bent dan nog steeds zelf in control in je code, niets vreemds aan.
 
Ward van der Put
Moderator

Ward van der Put

24/09/2017 20:13:55
Quote Anchor link
In je code ben je altijd in control. Lijkt mij, want het is jouw code.

Je mist het punt: je kunt niet vertrouwen op de client, ook niet met met een hash van de requestparameters.
 
Wesley Rijnders

Wesley Rijnders

24/09/2017 21:50:12
Quote Anchor link
Ward van der Put op 24/09/2017 20:13:55:
In je code ben je altijd in control. Lijkt mij, want het is jouw code.

Je mist het punt: je kunt niet vertrouwen op de client, ook niet met met een hash van de requestparameters.


Je kan een client prima via een hashurl laten lopen, de rest doe je op de achtergrond...
Gewijzigd op 24/09/2017 22:10:11 door Wesley Rijnders
 
Rob Doemaarwat

Rob Doemaarwat

24/09/2017 22:27:50
Quote Anchor link
Ik wil het nog wel een keer uitleggen, deze keer wat langzamer, zodat je 'm misschien vat:
- Je hebt een stel params: $status, $id, $whatever; deze komen allemaal in de URL (GET) vanuit Sisow.
- Je hebt een $secret; die komt niet in de URL (maar beide zijden weten 'm).
- Sisow berekent een hash($status . $id . $whatever . $secret); die geven ze ook mee in de URL (GET).
- Aan de ontvangende kant maak je nu dezelfde som: hash($status . $id . $whatever . $secret) (eerste 3 uit de GET, secret weet je).
- Die controleer je met de hash uit de GET. Als die niet gelijk zijn weet je dus dat er geknoeid is met de $status, $id, of $whatever (en dat gebeurt regelmatig).

Mocht je hier toch mogelijkheden zien om daar omheen te komen, dan kun je vanaf nu gratis bestellen bij webshops die hun betalingen via Sisow laten lopen (gewoon Annuleren bij je bank, in de return URL status=Success zetten, en even zelf de hash uitrekenen). Succes(s) ...
 
Wesley Rijnders

Wesley Rijnders

25/09/2017 00:42:37
Quote Anchor link
Daar ging het niet om, het ging erom dat een client die een hash aanroept helemaal niet zo'n probleem is, hoe denk je anders dat een wachtwoord reset werkt ?

Zo dus.
 
Ivo P

Ivo P

25/09/2017 09:13:03
Quote Anchor link
het vervelende van de route via de client is, dat je nooit 100% zekerheid hebt dat de klant ook werkelijk terugkomt.

Ik heb het zelf ooit gehad dat de redirect vanuit ideal naar de webshop misliep: url was niet bereikbaar. Misschien een overbelasting bij de (best grote) webshop, of een hik van de server. In elk geval had ik wel betaald, maar dat was niet bekend bij de shop.

Klantenservice kon vervolgens na contact niet leveren. Wel uiteindelijk geld retour gekregen maar producten waren al uitverkocht. Kennelijk triggerde die shop ook alleen maar op "klant komt terug". Of dat dan inclusief de hash was, of dat er ook een server-to-server contact was geweest, weet ik niet. Wel dat de webshop er ten onrechte vanuit ging dat de klant per se terug komt na de de betaling.
 
Wesley Rijnders

Wesley Rijnders

25/09/2017 11:11:21
Quote Anchor link
Ja klopt je moet het wel iets beter doen, het ging me meer om het verhaal een gehashte url wat prima kan.

Weet iemand waar Mllie de BetalingsId op baseert ? Het lijkt me dat er zeker wel duplicates in hun DB zitten namelijk en iedereen met die ID aan de haal kan gaan.
 
Ward van der Put
Moderator

Ward van der Put

25/09/2017 17:17:40
Quote Anchor link
Het gaat me niet om de veiligheid van de hash, maar om het blindelings vertrouwen op een client request.

Zo'n 5 procent van de bezoekers die afrekenen met iDEAL, klikt in het laatste scherm niet op "terug naar de webwinkel". Nee, die sluiten gewoon het browservenster: betaald, klaar. Die GET met of zonder hash komt er dan dus nooit.

Maar geloof mij maar niet hoor. Doe maar wat.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/09/2017 17:26:03
Quote Anchor link
Precies wat Ward zegt gebeurde mij laatst bij een gerenommeerde webshop. Terwijl ik de tab in de browser sloot dacht ik: Oops ik had eerst terug moeten keren naar de webshop. Was ik even blij dat het om een grote bekende speler ging! Na een kwartiertje kwam netjes de bevestigingsmail binnen. Zonder server-to-server verbinding had die er nooit gekomen.
 
Rob Doemaarwat

Rob Doemaarwat

25/09/2017 19:04:51
Quote Anchor link
Sisow doet beide:
- Initieel vertrouwen ze op de returnUrl, waarbij dus de hele rambam in 1x via de client wordt teruggeketst (met controle hash).
- Maar je kunt ook nog een callbackUrl meegeven waarmee ze een server-to-server terugkoppeling doen. Maar die komt dus vaak pas 'een tijdje later' (een kwartier klinkt wel herkenbaar).

Maar dat moet de webshop bouwert dan dus wel ingebouwd hebben. Je moet het nl apart aangeven op het moment dat je een payment link aanvraagt bij Sisow, en dat gebeurt idd niet altijd. Waardoor je dus bij sommige webshops niet moet vergeten om "terug naar de webwinkel" te klikken.

En zo zijn er natuurlijk ook nog legio webshops die die hele hash niet controleren en dus echt op de data in de GET vertrouwen. Dan kun je dus op "Annuleren" klikken bij je bank, en vervolgens zelf "Success" in de URL typen ...
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/09/2017 20:16:15
Quote Anchor link
Ik heb zelf nooit met Sisow te maken gehad maar ik vind dat maar vreemd dat je een server-to-server koppeling apart moet aanvragen. Ik zou mijn klanten als ik Sisow was duidelijk uitleggen dat ze die koppeling toch echt beter wel kunnen gebruiken. Het is voor een payprovider overigens ook mogelijk om te controleren of een klant de koppeling gebruikt ja dan de nee, iig tot aan de response die teruggegeven wordt door jouw applicatie op de koppeling.
 
Rob Doemaarwat

Rob Doemaarwat

25/09/2017 22:15:02
Quote Anchor link
Mijn gevoel zegt me dat Sisow meer uit de frôbel PHP hoek komt (of daar op mikt). Basis eerst, rest (beveiliging) "kan later altijd nog". Dus eerst alle params uit de GET halen, die hash "kan later altijd nog". Eerst via die returnUrl, als blijkt dat mensen niet altijd "terug naar de webshop" gaan, alsnog die callbackUrl inbouwen.

Mollie (meer ervaring heb ik ook niet met payment providers) voelt wat meer doordacht+degelijker. Maar komt dus ook wat meer bij kijken. Als je al via Composer werkt is het gewoon een regeltje d'r bij, maar voor Sisow hoef je maar één file te includen (meer is er ook niet).

Sisow zal dus voor een beginner heel snel op te pakken zijn, maar omdat het zo makkelijk is, en niets hoeft, laat je ook makkelijk gaten vallen (hash niet controleren, geen registratie als de klant niet "terug naar webshop" klikt = gezeik).

Een beetje zoals de gemiddelde vragensteller hier altijd roept dat ze "de beveiliging later wel op orde maken" als ze op SQLi e.d. gewezen worden (met een SSL certificaat) ;-)
 
Ward van der Put
Moderator

Ward van der Put

26/09/2017 11:24:52
Quote Anchor link
Rob Doemaarwat op 25/09/2017 19:04:51:
Sisow doet beide:
- Initieel vertrouwen ze op de returnUrl, waarbij dus de hele rambam in 1x via de client wordt teruggeketst (met controle hash).
- Maar je kunt ook nog een callbackUrl meegeven waarmee ze een server-to-server terugkoppeling doen. Maar die komt dus vaak pas 'een tijdje later' (een kwartier klinkt wel herkenbaar).

Aha, nu begrijp ik het: je moet inderdaad haast wel de return-URL gebruiken als de callback zo idioot lang op zich laat wachten. Dat is gewoon niet werkbaar anders!
 
Ivo P

Ivo P

26/09/2017 12:05:38
Quote Anchor link
Ik heb ooit iDeal geïmpementeerd rechtstreeks bij "iDeal". Dat was dan een klein beetje, maar niet veel, verschillend voor bijvoorbeeld Rabobank en Abn-Amro.

Daarin was in de procdure vastgelegd, dat in principde de callback eerst kwam.
Maar ik ben niet 100% zeker of die callback daar ook bestond.
Maar komt je klant eerder terug dan de callback, dan moest je zelf de status opvragen.

Was die niet Success of Failure, en dus nog iets van "bezig", dan moest je gedurende 24 uur (of meer) op intervallen van een half uur of zo, steeds pollen of de status al definitief was.

En was het "success", dan alsnog de bestelling in werking stellen en klant mailen.
Dat kan de vertraging van een kwartier ook verklaren.

Nadeel was, dat je scripts voor een Rabobank klant net niet helemaal werkten als de volgende klant (als in klant voor de websitebouwer) bij de Abn zat.
En dan had Rabo vlak daarna ook een tussenvorm Internetkassa.

Maar uiteindelijk werkt het mi. via Mollie en dergelijke partijen het fijnst, omdat je dan naast iDeal ook nog zo vele andere methoden kunt aanvinken. Zonder al je scripts om te gooien
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.