english English

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.

Ogone e-Commerce: Betere beveiliging met de nieuwe manier van SHA-IN en SHA-OUT versleuteling

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.

Hashing-methode

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.

RSS reacties feed

9 reacties tot nu toe

W247 Webdesign

W247 Webdesign zei 2 jaar geleden:

Voor de .NETters hierbij functie om SHA512 te engrypteren,

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

Maarten Tibau zei 2 jaar geleden:

Ik moet zeggen, dat deze posts over Ogone echt geweldig zijn. Zeer duidelijk en echt bruikbaar!
Thank you!
Dirk Bonhomme

Dirk Bonhomme zei 2 jaar geleden:

Handige blogpost Dieter. Tijdens de ontwikkeling is het fijn om terug te kunnen vallen op deze referentie.
Dennis Vervest

Dennis Vervest zei 2 jaar geleden:

Handig inderdaad.
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

Dennis Vervest zei 2 jaar geleden:

sha-in werkt prima, maar heb je zelf de sha-out ook werkend gekregen? het wil hier maar niet lukken...
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

Dieter zei 2 jaar geleden:

@Dennis Vervest, de SHA-out werkt zonder problemen. Je moet elke $_POST-waarde die je terug krijgt van Ogone verwerken in je SHA-out. Dan werkt dit zonder problemen.
Dennis Vervest

Dennis Vervest zei 2 jaar geleden:

@Dieter: hartelijk dank voor je antwoord. Het is zojuist overigens gelukt! ik kwam er achter dat je in de SHA-OUT string geen variabelen zonder waarde mag meenemen. Maar goed, ik ben bezig met Rabobank Internetkassa, misschien wijkt dit iets af van Ogone.

Complmenten verder voor jullie website, er staan veel nuttige dingen op voor ons collega's!
Maurice Bonemeijer

Maurice Bonemeijer zei 1 jaar geleden:

@Dennis Vervest Zelf ben ik bezig met een standaard implementatie van Ogone. Alhoewel in de documentatie staat dat de SHA-OUT hetzeflde gegenereerd dient te worden als de SHA-IN, blijkt dit dus (inderdaad) niet het geval.

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

Alex Jeensma zei 1 jaar geleden:

Hier heb ik toevallig ook een stukje over geschreven, ik heb het echter in een methode gedaan zodat je gewoon de $_POST array kan meegeven, aan kunt geven of het een SHA IN of SHA OUT versleuteling moet betreffen en welke hash er gebruikt moet worden, zie: http://blog.vontis.nl/?p=37

Reageer op dit artikel

Toegelaten tags: <a href="" title=""> <code> <em> <strong>

RSS Feed

Bekijk alle tags

Laatste reacties

  • Fabio Maggio: @Tom Claus: bedankt!
  • Tom Claus: @Filip Bedankt voor de tip, CouchDB gaan we zeker even mee bekijken. @Fabio Deze...
  • Fabio Maggio: Is die presentatie van Masterizing PHP Data Structure ook nog ergens te bekijken?
  • Tom Hermans: Thx Tom, schone samenvatting en een massa interessante links, ideaal voor mensen die die dag...
  • Filip Stas: Als MongoDb je al boeit zeker ook eens kijken naar couchbase ook zeker de moeite!