Ogone e-Commerce: Betere beveiliging door nieuwe versleuteling
In mijn vorige blogpost over Ogone e-Commerce in de praktijk legde ik kort en bondig uit hoe je een Ogone e-Commerce integratie kunt opzetten van A-Z. Hier werd gesproken over de SHASign, een unieke tekenreeks om de bestelgegevens te valideren. Ogone heeft echter onlangs een update gedaan van hun test- en productieomgeving. De belangrijkste update is de nieuwe manier van SHA-IN en SHA-OUT versleuteling. Via deze blogpost zal ik dan ook kort even toelichten hoe de versleuteling nu in zijn werk gaat.

Wat met mijn oudere e-Commerce integraties?
De nieuwe manier van SHA-IN en SHA-OUT versleuteling heeft geen enkele invloed op bestaande e-Commerce integraties. Deze zullen zonder problemen blijven werken, maar Ogone raadt om over te schakelen naar de nieuwe manier van versleuteling. Elke nieuwe Ogone account aangemaakt na 11 mei 2010 zal automatisch gebruik gaan maken van de nieuwe SHA-IN en SHA-OUT versleuteling.
Wat verandert er aan mijn betalingsformulier?
Aan de HTML-code van je betalingsformulier zal er niets veranderen. Het is enkel de versleuteling van de SHA-IN en SHA-OUT, die je nodig hebt om de gegegevens te valideren die aangepast moet worden.
Alle parameters die je opgeeft binnen je betalingsformulier dien je nu bij je SHA-IN versleuteling mee te geven. Deze moeten in alfabetische volgorde opgenomen worden en achter elke parameter moet de passphrase (geheime string) geplaatst worden.
Deze passphrase kun je aanpassen binnen de Ogone Back-Office binnen het tabblad "Gegevens- en oorsprongverificatie" onder de pagina "Technische Informatie".
Hieronder een voorbeeld van een betalingsformulier:
<form method="post" action="https://secure.ogone.com/ncol/prod/orderstandard.asp" class="niceform">
<input type="hidden" name="accepturl" value="http://www.domein.be/ogone/accept.html" />
<input type="hidden" name="amount" value="1995" />
<input type="hidden" name="cancelurl" value="http://www.domein.be/ogone/cancel.html" />
<input type="hidden" name="cn" value="Dieter Verjans" />
<input type="hidden" name="COM" value="E-shop bestelling" />
<input type="hidden" name="currency" value="EUR" />
<input type="hidden" name="declineurl" value="http://www.domein.be/ogone/decline.html" />
<input type="hidden" name="email" value="dieter@inventis.be" />
<input type="hidden" name="exceptionurl" value="http://www.domein.be/ogone/exception.html" />
<input type="hidden" name="homeurl" value="http://www.domein.be" />
<input type="hidden" name="language" value="nl_NL" />
<input type="hidden" name="orderid" value="inv-0406" />
<input type="hidden" name="pspid" value="domeinPSPID" />
<input type="hidden" name="title" value="E-shop bestelling - 19,95eur" />
<input type="hidden" name="tp" value="http://www.domein.be/ogone/template.html" />
<input type="hidden" name="SHASign" value="{$SHASign}" />
<button type="submit" name="btn_pay">Betaal online</button>
</form>
Bij bovenstaand formulier zal onderstaande SHA-IN code versleuteld moeten worden, deze waarde voeren we dan in :
$passphraseIN = "inv-passprase-in";
$shaIN =
"ACCEPTURL=http://www.domein.be/ogone/accept.html" . $passphraseIN .
"AMOUNT=1995" . $passphraseIN .
"CANCELURL=http://www.domein.be/ogone/cancel.html" . $passphraseIN .
"CN=Dieter Verjans" . $passphraseIN .
"COM=E-shop bestelling" . $passphraseIN .
"CURRENCY=EUR" . $passphraseIN .
"DECLINEURL=http://www.domein.be/ogone/decline.html" . $passphraseIN .
"EMAIL=klant@hotmail.com" . $passphraseIN .
"EXCEPTIONURL=http://www.domein.be/ogone/exception.html" . $passphraseIN .
"HOMEURL=http://www.domein.be" . $passphraseIN .
"LANGUAGE=nl_NL" . $passphraseIN .
"ORDERID=inv-0406" . $passphraseIN .
"PSPID=domeinPSPID" . $passphraseIN .
"TITLE=E-shop bestelling - 19,95eur" . $passphraseIN .
"TP=http://www.domein.be/ogone/template.html".$passphraseIN
;
$SHASign = strtoupper(hash("sha512", $shaIN));
Belangrijk is dat de parameters in hoofdletters en op alfabetische volgorde staan en elke parameter opgeven in het formulier opgenomen wordt in de SHASign.
Hoe betaling valideren via SHA-OUT?
Wanneer je de betaalknop klikt binnen je formulier krijg je het alomgekende betaalformulier van Ogone, waar je kredietkaartgegevens dient op te geven. Eens deze gegevens opgegeven en het formulier verzonden, zal Ogone achterliggend een postsalerequest doen naar je website indien je dit zo hebt ingesteld in de Back-Office.
Hieronder kun je de SHA-OUT versleuteling terugvinden van ons voorbeeld. De variabele $ogoneData is de POST-waarde die we terugkrijgen van Ogone.
$passphraseOUT = "inv-passprase-out";
$shaOUT =
"AAVCHECK=" . $ogoneData['AAVCheck'] . $passphraseOUT .
"ACCEPTANCE=" . $ogoneData['ACCEPTANCE'] . $passphraseOUT .
"AMOUNT=" . $ogoneData['amount'] . $passphraseOUT .
"BRAND=" . $ogoneData['BRAND'] . $passphraseOUT .
"CARDNO=" . $ogoneData['CARDNO'] . $passphraseOUT .
"CCCTY=" . $ogoneData['CCCTY'] . $passphraseOUT .
"CN=" . $ogoneData['CN'] . $passphraseOUT .
"CURRENCY=" . $ogoneData['currency'] . $passphraseOUT .
"CVCCHECK=" . $ogoneData['CVCCheck'] . $passphraseOUT .
"ECI=" . $ogoneData['ECI'] . $passphraseOUT .
"ED=" . $ogoneData['ED'] . $passphraseOUT .
"IP=" . $ogoneData['IP'] . $passphraseOUT .
"IPCTY=" . $ogoneData['IPCTY'] . $passphraseOUT .
"NCERROR=" . $ogoneData['NCERROR'] . $passphraseOUT .
"ORDERID=" . $ogoneData['orderID'] . $passphraseOUT .
"PAYID=" . $ogoneData['PAYID'] . $passphraseOUT .
"PM=" . $ogoneData['PM'] . $passphraseOUT .
"STATUS=" . $ogoneData['STATUS'] . $passphraseOUT .
"TRXDATE=" . $ogoneData['TRXDATE'] . $passphraseOUT .
"VC=" . $ogoneData['VC'] . $passphraseOUT
;
$SHASign = strtoupper(hash("sha512", $shaOUT));
Ook hier is het belangrijk dat alle parameters in hoofdletters en op alfabetische volgorde worden opgenomen en dat alle elementen uit de POST-waarde afkomstig van Ogone worden gebruikt.
Welke hashing-methode mag/kan ik gebruiken.

Je hebt de keuze uit 3 verschillende hashing-methode:
- SHA-1 (PHP 4 >= 4.3.0, PHP 5)
- SHA-256 (PHP 5 >= 5.1.2, PECL hash >= 1.1)
- SHA-512 (PHP 5 >= 5.1.2, PECL hash >= 1.1)
In dit voorbeeld maak ik gebruik van SHA-512 hashing-methode, de meest veilige methode. Hierover heb je echter minimum PHP-versie 5.12 nodig of de PECL hash extensie vanaf versie 1.1.
Mocht je server geen PHP 5 of PECL hash ondersteuning hebben, kun je nog steeds de SHA-1 hashing-methode gebruiken.
Aangezien je weinig terug vindt op internet van de nieuwe SHA-IN en SHA-OUT versleuteling van Ogone, hoop ik dat je met deze blogpost voldoende informatie heb gegeven om de integratie van de nieuwe hashing-methodes tot een goed einde te brengen.



9 reacties tot nu toe
W247 Webdesign zei 2 jaar geleden:
Imports System.Security.Cryptography
Public Function sha512encrypt(ByVal myString As String) As String
Dim encoder As New UTF8Encoding()
Dim sha512hasher As New SHA512Managed()
Dim hashedDataBytes As Byte() = sha512hasher.ComputeHash(encoder.GetBytes(myString))
Return byteArrayToString(hashedDataBytes)
End Function
Maarten Tibau zei 2 jaar geleden:
Thank you!
Dirk Bonhomme zei 2 jaar geleden:
Dennis Vervest zei 2 jaar geleden:
Ik ben bezig Rabobank Internetkassa te implementeren op een op Drupal-Ubercart installatie, en de documentatie van de nieuwe SHA laat bij Rabobank nogal te wensen over.
bedankt!
Dennis Vervest zei 2 jaar geleden:
ik heb nu ongeveer 40.000 verschilende combinaties geprobeerd, helaas zonder succes.
in de voorbeelden in de Ogone / Rabobank Internetkassa-handleiding is het niet helemaal duidelijk hoe je AMOUNT moet formatteren (bij sha-out).
Dieter zei 2 jaar geleden:
Dennis Vervest zei 2 jaar geleden:
Complmenten verder voor jullie website, er staan veel nuttige dingen op voor ons collega's!
Maurice Bonemeijer zei 1 jaar geleden:
Bij deze een bevestiging voor iedereen om bij de SHA-OUT geen lege waardes mee te nemen in het genereren van de hash.
Alex Jeensma zei 1 jaar geleden: