Bir sisteme weepay sanal pos kodlarken woocommerce eklentilerinden kopya çekeyim dedim entegrasyon açıklamaları yeterli gelmeyince ama şunu fark ettim.
Callback kısmında hash kontrolü yok weepayde, ödemeyi onların tarafında oluşturulan id ile doğruluyoruz. Woocommerce kodlarında paymentId yi post ile çekip doğrulamışlar ama orderId yi de hiç doğrulamadan post içinden alıp eğer ödeme gerçekleştiyse başarılı yapıyorlar.
yani şu şekilde şöyle bir açık oluşabilir diye düşündüm. 200 tllik ürün aldım ve callback kısmında post içinde ki değerleri kopyaladım sadece orderId yi 5000 liralık siparişimin idsi olarak değiştirdim postu tekrar gönderdim o üründe ben ödeme yapmadan tamamlanmış olacak.
çünkü arkaplanda sadece paymentId yi kontrol ederek ödenmiş mi diye kontrol ediyor, o paymentId de ki orderId yi çekmiyor veya karşılaştırmıyor.
hash tarzı bir kontrol olmadığı için order id değişseydi hash uyuşmayacaktı.
GetOrderData fonksiyonuna paymentId yanına birde orderId eklenerek apiye istek gönderse düzelir sanırım ya da kodlar içinde apiden gelen order id ile işlemlere devam etse.
eğer ben gözümden bir yer kaçırdıysam ya da açık yoksa konuyu sileceğim
Kesinlikle güvenlik açığı var hocam $orderId ve $paymentId gibi değerler POST verilerinden alınarak doğrudan işlem yapılıyor. Bu durum, sahte POST istekleriyle manipülasyona açık.
Kesinlikle güvenlik açığı var hocam $orderId ve $paymentId gibi değerler POST verilerinden alınarak doğrudan işlem yapılıyor. Bu durum, sahte POST istekleriyle manipülasyona açık.
evet hocam sadece $paymentId yi post değerinden alıp apiden dönen orderId ile işlem yapılmalı veya dönen değerle $orderId karşılaştırılsa eşleşmezse işlem sonlandırılır ama burada direkt paymentId ile apiden ödeme bilgisi alınıyor ödenmişse postla gelen orderId yi woocommerce de ödendi işaretliyor, belki benim gözden kaçırdığım veya bilmediğim bir şey vardır diye paylaştım ama yüksek ihtimalle açık var
Evet, haklısınız. Kodun mevcut hali güvenlik açısından riskli . Sizin de belirttiğiniz gibi, API'den dönen orderId ile POST'tan gelen orderId arasında bir karşılaştırma yapılmıyor ve sadece paymentId üzerinden işlem yapılıyor. Bu durum kötü niyetli bir kişinin sahte bir POST isteği ile ödeme durumunu manipüle etmesine olanak tanır. Sahte paymentId ile sahte bir ödemenin doğrulanmış gibi gösterilmesine neden olabilir.
Evet, haklısınız. Kodun mevcut hali güvenlik açısından riskli . Sizin de belirttiğiniz gibi, API'den dönen orderId ile POST'tan gelen orderId arasında bir karşılaştırma yapılmıyor ve sadece paymentId üzerinden işlem yapılıyor. Bu durum kötü niyetli bir kişinin sahte bir POST isteği ile ödeme durumunu manipüle etmesine olanak tanır. Sahte paymentId ile sahte bir ödemenin doğrulanmış gibi gösterilmesine neden olabilir.
sahte paymentId kullanılamaz hocam weepay apisinden kontrol edildiği için ama evet açık var gibi orderId kısmı için
sahte paymentId kullanılamaz hocam weepay apisinden kontrol edildiği için ama evet açık var gibi orderId kısmı için
Evet hocam yanlış belirttim paymentId'nin sahte kullanımı Weepay API'si tarafından kontrol ediliyor. Ancak, dediğiniz gibi kodda orderId doğrulama eksikliği bulunuyor. POST'tan gelen orderId ile Weepay API'sinden dönen orderId karşılaştırılmadığı için, kötü niyetli bir kişi sahte bir orderId ile ödeme işlemini manipüle edebilir. Bu açığı kapatmak için, API'den gelen orderId ile POST'tan gelen orderId'yi karşılaştırarak yalnızca geçerli bir orderId ile işlem yapılmasını sağlanmalı. Weepay ekibine bunu bildirmeyi düşünebilirsiniz.
GetOrderData'da paymentId iletilip tekrardan istek atılıyor ve requestte gizli olarak tutulan secretKey ApiKey gibi bilgiler yeralıyor callback manipüle edilemez Ödemenin gerçekten Weepay tarafında status'u success'mı diye kontrolü yapılıyor. Manipüle edersinde siparişin teslim edilebilmesi kısmına geçemezsin weepay'den success gelmez ödeme olmadıysa hiçbir şekilde.
GetOrderData'da paymentId iletilip tekrardan sorgu atılıyor ve requestte gizli olarak tutulan secretKey ApiKey gibi bilgiler yeralıyor callback manipüle edilemez Ödemenin gerçekten Weepay tarafında status'u 2. kez success kontrolü yapılıyor. Tamam ödeme yapılmamış bir order'ı manipüle edersinde siparişin teslim edilebilmesi için öndesinde tekrar weepay ile haberleşip gerçekten sunucu tarafında ödemenin success'mı olduğu kontrolü yapılıyor burada ne yaparsan yap weepay'den o ödeme yapılmadığı taktirde o success'ı alamazsın manipüle ile bilginize.
200 tllik bir sepetin ödemesini yaparsak onun paymentId si ve 5000 tllik siparişimizin orderId si ile ödeme yapılabilir gibi hocam. 200 tllik siparişte ki paymentId yi kontrol edecek ödediğimiz için success kısımları geçilecek post ile gönderdiğimz orderId yi tamamlandı işaretleyecek
200 tllik bir sepetin ödemesini yaparsak onun paymentId si ve 5000 tllik siparişimizin orderId si ile ödeme yapılabilir gibi hocam. 200 tllik siparişte ki paymentId yi kontrol edecek ödediğimiz için success kısımları geçilecek post ile gönderdiğimz orderId yi tamamlandı işaretleyecek
kodları detaylı okursan Post işleminde gönderilen payment ve order id'leri üzerinden işlem yapıyor zaten sen başka bir order payment id verirsen onunda sipariş teslim ederken sipariş başarıyla teslim edildiğinin zaten kontrolü vardır 2. kez siparişi teslim etmez ve ödemeside hiçbir şekilde yapılmamış bir siparişin weepay tarafından success' alamıyacağın için sipariş teslim etme kısmına yine hiç ulaşamazsın kurgularınızda ciddi sıkıntılar var ufkunuzu açarak düşünün