Güvenlik Önerileri
Craftgate, sunmuş olduğu uçtan uca çözümler ile birlikte size kesintisiz ve güvenli bir ödeme deneyimi sağlar. Craftgate'in sunmuş olduğu çözümlere ek olarak üye işyerlerimizin de dikkate alabileceği önerilerimiz bulunmaktadır. Sorularınız ve görüşleriniz için destek@craftgate.io ile iletişime geçebilirsiniz.
A. Temel Güvenlik Önlemleri
API Key / Secret Key bilgilerini nasıl saklamalıyız?
Craftgate API'lerini kullanabilmek için gerekli olan bu 2 değer güvenli bir şekilde saklanmalı(tercihen şifrelenmiş) ve yetkisiz kişilerle paylaşılmamalıdır. Ek olarak dilerseniz mevcut anahtarlarınızı belirli periyotlarla Craftgate Üye İşyeri Panelinden yenileyebilirsiniz. Daha fazla bilgi için API Key / Secret Key Yönetimi sayfasını ziyaret edebilirsiniz.
B. 3DSecure Ödeme Akışı İçin Güvenlik Önlemleri
Hangi durumlarda 3D Secure ödemeyi tercih etmeliyiz?
Non-3DS ödemeler çok daha hızlı gerçekleşmesine rağmen bazı durumlarda tercih edilmemelidir. Aşağıdaki senaryolar için Non-3DS yerine 3DS ile ödeme alınması önerilir.
- Ön ödemeli (
PrePaid
) ve banka kartlarından (Debit
) 3DS ile ödeme alınması önerilir. Ödeme isteği ile gelen kartın tipini anlamak için Craftgate'in Bin Sorgulama servisini kullanabilirsiniz. - Yeni bir üyenin ilk siparişinde kullanıcıyı doğrulayabilmek için kullanılacak olan kart tipi farketmeksizin 3DS ile ödeme alınması önerilir.
- Mevcut bir üyenin adres değişikliği sonrasında ki ilk siparişinde kullanılacak olan kart tipi farketmeksizin 3DS ile ödeme alınması önerilir.
- Ödeme sonucunda eğer
LOST_CARD
,STOLEN_CARD
,PICKUP_CARD
hata grupları ile ödeme hatası alınıyorsa kullanıcı takibe alınmalı ve yeni ödemeleri 3DS ile alınması önerilir. - Kullanıcınızın normallerinden çok daha fazla tutarı olan işlemlerinde ödemeleri 3DS ile alınması önerilir.
3D Secure ödemeler için doğrulama tipi ne olmalı?
3D Secure ödemelerde kullanıcı doğrulaması tam ve yarım doğrulama şeklinde yapılabilir. Tam doğrulama, kullanıcının telefonuna SMS'in iletilmesi ve doğrulama kodunun da doğru girilmesi ile gerçekleşir. Yarım doğrulama ise kullanıcının 3D Secure sistemine tam dahil olamadığı, telefonunun bankada kayıtlı olmaması gibi durumlarda gerçekleşir. Yarım doğrulanan 3D Secure ödemeler tamamlanabilir ancak tam anlamıyla kullanıcı doğrulanamadığı için riskler barındırır.
Craftgate olarak iki çözümü de desteklemekteyiz. Dilerseniz bu seçimi Üye İşyeri Paneli -> Genel Ayarlar
kısmından seçebilirsiniz.
Hash doğrulama ile 3D Secure ödemelerin güvenlik kontrolünü nasıl yapabilirsiniz?
3DS ÖDEMELERİNİZDE HASH DOĞRULAMA İLE GÜVENLİK ADIMINI MUTLAKA UYGULAYINIZ!
3D Secure ödemelerde kullanıcı kendisini başarılı bir şekilde doğrular ise ödeme akışına devam edilir.
Doğrulama sonucunu üye işyerine iletilirken Callback URL çağrısı İçin Güvenlik Önlemleri adımındaki doğrulamayı yapmalıdır.
Hash uyuşmazlığı oluşursa ödemeye devam edilmemelidir.
Hash hesaplama algoritması için 3D Secure Ödeme Alma sayfasını ziyaret edebilirsiniz.
Üye İşyeri, gelen parametreleri kendi tarafındaki veri ile karşılaştırmalı, sepet kontrolü, kullanıcı oturum bilgisi kontrol edilmelidir.
3D Secure ödemelerde, ödeme tamamlanmadan sepette değişiklik yapılabilir mi?
3D Secure ödemeler doğası gereği kullanıcının tarayıcısında gerçekleşen ve ortalama 50-60 saniye sürebilen bir akışa sahiptir.
3D Secure ödemenin başlatılması, doğrulanması ve tamamlanması arasında geçen süre boyunca kullanıcının sepet üzerinde yaptığı değişikliklere dikkat edilmeli. Sepet değiştiğinde kullanıcı uyarılmalı ve ödemeye devam edilmemelidir
. Güncel sepet bilgisi ile 3D Secure ödeme tekrar başlatılmalıdır.
C. Callback URL çağrısı İçin Güvenlik Önlemleri
Callback adresine yapılan çağrılarda çağrının Craftgate sistemi tarafından yapıldığının kontrol edilmesi gerekmektedir.
Bu kontrolün yapılabilmesi için callback adresine yapılan çağrıda bazı parametreler ile birlikte Craftgate tarafından üretilen hash
değeri ve bu değer üretilirken kullanılan parametreler için hashParams
değeri iletilir.
Gelen parametreler için Hash Değerinin Oluşurulması ve Kontrolü sağlanmalıdır.
Mecburi Güvenlik Adımı: Hash Değerinin Oluşurulması ve Kontrolü
Üye işyerinin Callback URL'ine, Craftgate'in geldiği gibi kötü niyetli kişiler de istek atabilir. O nedenle CALLBACK URL'E GELEN HİÇBİR İSTEĞE, HASH KONTROLÜ YAPMADAN KESİNLİKLE GÜVENMEYİNİZ.
İşlem için gerekli 32 Haneli key değerine Panel üzerinde bulunan Yönetim -> Üye İşyeri Ayarları arayüzündeki "Üye İşyeri Callback Key" alanından ulaşabilirsiniz.
- Java
- Node.js
public boolean verifyHash(Map<String, String> callbackParams, String callbackKey) {
String hashValues = Arrays.stream(callbackParams.get("hashParams").split(":"))
.map(callbackParams::get)
.collect(Collectors.joining());
String calculatedHash = DigestUtils.sha256Hex(callbackKey + hashValues);
return calculatedHash.equals(callbackParams.get("hash"));
}
function verifyHash(callbackParams, callbackKey) {
const hashValues = callbackParams['hashParams'].split(':')
.map(param => callbackParams[param])
.join('');
const calculatedHash = crypto
.createHash('sha256')
.update(callbackKey + hashValues)
.digest('hex');
return calculatedHash === callbackParams['hash'];
}
Örnek olarak aşağıdaki callback içeriğinin iletildiğini ve Üye İşyeri Callback Key değerinin merchantCallbackKeySandbox
olduğunu varsayalım.
status=SUCCESS
callbackStatus=
paymentId=863
paymentStatus=SUCCESS
conversationId=d1811bb0-25a2-40c7-ba71-c8b605259611
mdStatus=1
hashParams=paymentId:status:callbackStatus:conversationId:mdStatus
hash=9f746eb6b0886636654243e04e4c69fd84c4ca78a6afcc442491d25663142a21
hashParams
parametrelerinden null
değerleri eleyip String olarak birleştirmelisiniz. 3D Secure Doğrulama v1'den farklı olarak bu adımında hashString içerisine ###
karakteri koyulmamaktadır.
Örnekte, hash algoritmasına sokulacak değer şu şekilde oluşmalı:
merchantCallbackKeySandbox863SUCCESSd1811bb0-25a2-40c7-ba71-c8b6052596111
Yukarıdaki algoritma kullanılarak oluşacak hash değeri aşağıdaki gibi olacaktır.
9f746eb6b0886636654243e04e4c69fd84c4ca78a6afcc442491d25663142a21
Oluşturulan değerin istek içerisinde bulunan "hash" parametresine eşitliği karşılaştılarak validasyon sağlanmalıdır.
Sunmuş olduğumuz Açık Kaynak Kütüphaneler üzerinden de hash oluşturma işlemini yapabilirsiniz.
D. Webhook Akışı İçin Güvenlik Önlemleri
Webhook adresinize iletilen isteğin Craftgate tarafından geldiğinin kontrolü nasıl yapılabilir?
Webhook URLinize gelen isteklerin Craftgate sisteminden gönderildiğini bilgisinin teyit edilebilmesi için, HTTP headerları arasında gönderilen x-cg-signature-v1
değerinin kontrol edilmesi gerekmektedir. Detaylara Webhook sayfamızdan ulaşabilirsiniz.
E. Ortak Ödeme Formu Üzerinden Yapılan Ödemeler İçin Güvenlik Önlemleri
Ortak ödeme formu üzerinden yapılan ödemelerde güvenlik kontrolü nasıl yapılmalıdır?
Ortak ödeme formu üzerinden yapılan ödemelerde, sonuç olarak üye işyerinin callback adresine ödeme ile ilişkili bir token bilgisi döner. (Bkz. Ortak Ödeme Sayfası ile Ödeme Alma) Bu token bilgisi ile Craftgate ortak ödeme sayfası ödemesi sorgulama servisinden ödemenin çekiniz. (Bkz. Ortak Ödeme Sayfası Ödemesi Sorgulama) Size dönen ödeme detaylarından ödemenin başarı durumunu, ilettiğiniz conversation id ve external id gibi sizin için özel anlamları bulunan değerler ile kontrol ettiğiniz siparişi karşılaştırınız. Böylelikle kontrol ettiğiniz sipariş ile ilgili güvenilir bir dönüş yapıldığından emin olabilirsiniz.
F. Güvenlik Açısından Hata Yönetimi
Hata gruplarını nasıl yorumlamalıyız?
Craftgate, ödeme işlemi bankada hatalı sonuçlanırsa hatanın detayına göre hatayı gruplayıp, tasnifleyip size en doğru hata detayı ile dönmektedir. Ödeme cevabında yer alan hata grubu alanında hatanın grubunu, hata açıklamasında ise hatanın nedenini bulabilirsiniz. Dilerseniz bu hata mesajını doğrudan kullanıcınıza gösterebilir ya da dilerseniz hata grubuna göre kendi hata mesajınızı gösterebilirsiniz.
Ödeme sonucunda eğer LOST_CARD
, STOLEN_CARD
, PICKUP_CARD
hata grupları ile ödeme hatası alınıyorsa kullanıcı takibe alınmalıdır. NOT_SUFFICIENT_FUNDS
, RESTRICTED_BY_LAW
gibi hatalarda ise kullanıcı bilgilendirilerek ödeme tekrar denenebilir.
Detaylara Hata Grupları sayfamızdan ulaşabilirsiniz.