Güncellemeler

Minecraft CMS'in sürüm sürüm neleri getirdiğini, neleri düzelttiğini burada takip edebilirsin. Yeni bir şey arıyorsan — muhtemelen burada.

Düzeltildi

Satın alma "bir hata oluştu" sorunu giderildi (Türkçe sitelerde tüm alımlar)

Mağazadan rütbe veya ürün satın alınırken "Satın alma sırasında bir hata oluştu. Lütfen tekrar deneyin." hatası alınıyor, alım tamamlanmıyordu. Sorun özellikle Türkçe dilindeki sitelerde her satın almayı etkiliyordu.

Sebep: Satın alma kaydındaki product_type sütunu yalnızca rank, item, key, other değerlerini kabul eder; ancak kod buraya çevrilmiş etiketi yazıyordu (Türkçe'de rütbe / eşya). Bu değerler listede olmadığından MySQL kaydı reddediyor, işlem geri alınıyordu. Sepetten ürün alımında da sepet tipi (product) bu listede olmadığı için aynı hata oluşuyordu.

Düzeltme: Artık product_type sütununa dilden bağımsız sabit değer (rank / item) yazılıyor; etiketin çevirisi yalnızca ekranda gösterilirken yapılıyor. Hem "hemen al" hem sepet ile alım akışı düzeldi. Veritabanı değişikliği gerekmez.

Düzeltildi

Kredi "Data truncated" hatası önekli kurulumlarda kalıcı çözüldü

Admin panelden kredi/bakiye verirken alınan "Data truncated for column 'type'" hatası, /update.php çalıştırılmasına rağmen bazı kurulumlarda devam ediyordu.

Sebep: Veritabanı tablo öneki (prefix) kullanan kurulumlarda, /update.php'deki düzeltme tabloyu önek olmadan aradığından yanlış tabloyu hedefliyor ve sessizce atlıyordu; bu yüzden balance_transactions.type enum'una adjustment değeri hiç eklenmiyordu.

Düzeltme: Artık admin Kullanıcılar sayfası açıldığında enum kendiliğinden ve önek-uyumlu şekilde onarılıyor — önekli/öneksiz tüm kurulumlarda çalışır. (/update.php de önek-uyumlu hale getirildi.)

Kurulu siteler için: Tek yapılması gereken dosyaları güncelleyip admin → Kullanıcılar sayfasını bir kez açmak. /update.php çalıştırmaya veya veritabanına elle dokunmaya gerek yok.

Eklendi

Yeni ödeme yöntemi: Paywant

Paywant artık desteklenen ödeme altyapıları arasında — mobil ödeme (Turkcell / Vodafone / Türk Telekom), kredi & banka kartı (3D Secure) ve havale/EFT tek ekranda sunulur.

Kurulum: Admin → Ayarlar → Ödeme bölümünden Aktif Ödeme Yöntemi'ni Paywant seçin, Paywant bayi panelinizdeki API Key ve API Secret değerlerini girin ve komisyonu kimin ödeyeceğini (mağaza/müşteri) belirleyin.

Ödeme bildirimi (callback) imza doğrulamalı işlenir: sahte "ödendi" bildirimleri reddedilir, bakiye yalnızca gerçek ödemede yüklenir.

Eklendi

KB-Transfer eklentisi: RCON olmadan satın alım teslimatı

Mağaza satın alımlarını oyuna otomatik teslim etmek için KB-Transfer eklentisi yayınlandı. Eklenti, sunucudan siteye kendisi bağlanır (HTTP); bu yüzden RCON portu açmaya veya firewall ayarı yapmaya gerek yoktur — fiilen her hosting'de çalışır.

Spigot / Paper / Bukkit 1.8.9 – 1.21+ uyumludur (Java 8). Kurulum: jar dosyasını sunucunun plugins/ klasörüne atın, config.yml içine site adresinizi ve Admin → Sunucular bölümündeki token'ı girin, ardından oyun içi/konsoldan /kbt test ile doğrulayın.

Halihazırda kurulu siteler için: Dosyaları güncelledikten sonra bir kez /update.php sayfasını admin olarak ziyaret edin — eklentinin kullandığı komut kuyruğu tablosu (server_commands) otomatik oluşturulur.

Düzeltildi Geliştirildi

Çevrimiçi oyuncu sayısı artık her hosting'de doğru gösteriliyor

Anasayfadaki çevrimiçi oyuncu sayısı, oyun modu kartları ve mağaza sayacı bazı sitelerde sürekli 0 gösteriyordu.

Sebep: Sunucu durumu yalnızca doğrudan soket (fsockopen) ile sorgulanıyordu. Paylaşımlı hosting'lerin çoğu bu tür bağlantıları (özellikle 25565 gibi oyun portlarına) engellediği için sonuç hep "çevrimdışı" dönüyordu. Ayrıca alan adı + SRV kaydı kullanan sunucularda yanlış porta bağlanılıyordu.

Düzeltme: Durum sorgusu artık önce Minecraft SRV kaydını çözüyor, doğrudan soketi deniyor, başarısız olursa bir dış durum servisine (HTTPS) düşüyor. Böylece oyunda erişilebilen her sunucu sitede de doğru görünür. Oyun modu ve mağaza kartları da (eklenti verisi yoksa) canlı sayıya düşürüldü. Sonuçlar 60 saniye önbelleğe alınır.

Düzeltildi

Admin yetkisi verme/çekme ve admin silme çalışmıyordu

Yöneticiler, bir kullanıcıya admin yetkisi verirken/alırken veya bir admini silerken işlem gerçekleşmiyordu (normal kullanıcılar silinebiliyordu).

Sebep: Yetki koruması, kullanıcıların role_id numarasını karşılaştırıyordu; ancak varsayılan rollerin numara sırası yetki sırasını yansıtmıyor (Oyuncu=1, Yönetici=2, Moderatör=3). Bu yüzden "admin → admin/moderatör" işlemleri yanlışlıkla engelleniyordu.

Düzeltme: Yetki seviyesi artık role_id numarasına göre değil, rolün admin/yetkili bayraklarına göre hesaplanıyor ve yalnızca hedef sizden daha yüksek yetkideyse işlem engelleniyor. Kendi hesabınıza işlem yapma koruması korundu.

Düzeltildi Güvenlik

Bakım modunda yöneticinin giriş yapamaması (kendini dışarı kilitleme) giderildi

Site bakım moduna alındığında, yönetici dahil hiç kimse giriş sayfasına ulaşamıyor; bakımı kapatmak için panele de girilemiyordu. Şifre sıfırlama bağlantıları da çalışmıyordu.

Sebep: Bakım kontrolü, istisna sayfasını (giriş, şifre sıfırlama) yalnızca eski ?page= parametresinden okuyordu; oysa site "temiz URL" (/giris?url=) kullanıyor. Bu yüzden giriş sayfası istisna sayılmıyor, bakım ekranı gösteriliyordu.

Düzeltme: Bakım kontrolü sayfayı artık site yönlendiricisiyle aynı şekilde (hem ?page hem ?url) çözüyor. Giriş ve şifre sıfırlama sayfaları, hangi URL biçimiyle açılırsa açılsın bakımda da erişilebilir; normal sayfalar ziyaretçilere kapalı kalır.

Düzeltildi

Dosya ekli destek talebi oluşturulamıyordu

Kullanıcılar destek talebine bir dosya/ekran görüntüsü eklediğinde talep oluşturulamıyordu (eki olmayan talepler çalışıyordu). Aynı sorun, talebe ekli yanıt göndermeyi de etkiliyordu.

Sebep: Ek dosya kaydı veritabanına yazılırken zorunlu olan file_name sütununa değer verilmiyordu; bu yüzden işlem geri alınıyor ve talep hiç oluşmuyordu.

Düzeltme: Ek kaydı artık eksiksiz yazılıyor (hem talep oluşturma hem yanıt ekleme). Ayrıca dosya tipi doğrulaması, fileinfo eklentisi kapalı hosting'lerde çökmek yerine güvenli bir yedekle (getimagesize + uzantı) çalışacak şekilde sağlamlaştırıldı.

Düzeltildi

Haber "Yayın Tarihi" kaydedilmiyordu (seçilen tarih eskiye dönüyordu)

Haber ekleme/düzenleme formundaki Yayın Tarihi alanı çalışmıyordu: seçtiğiniz tarih kaydedilmiyor, düzenlemede eski tarihe geri dönüyordu.

Sebep: Formdaki tarih alanı kaydetme sırasında hiç okunmuyordu; yeni haberlerde tarih her zaman "şimdi" yapılıyor, düzenlemede ise hiç güncellenmiyordu.

Düzeltme: Yayın tarihi artık formdan okunup kaydediliyor (yeni + düzenleme) ve düzenleme açıldığında mevcut tarih forma yükleniyor. Boş bırakılırsa: yeni haberde "şimdi", düzenlemede mevcut tarih korunur.

Eklendi

Sunucu bağlantı testi (Admin → Sunucular)

Admin → Sunucular sayfasındaki bağlantı testi (fiş simgesi) butonu artık gerçekten çalışıyor; daha önce yalnızca "henüz aktif değil" uyarısı gösteriyordu.

Konsol tipine göre test eder: RCON için gerçek bağlantı + şifre doğrulaması, WebSend için port erişilebilirliği, Plugin için sunucu durumu + token kontrolü. Sonuç ekranda açık bir mesajla gösterilir — böylece müşteriler ödeme yapmadan önce konsol ayarlarının doğru olduğunu teyit edebilirsiniz.

Eklendi Geliştirildi

Site logosu artık panelden yüklenebiliyor

Header ve footer'daki logo (varsayılan: küp ikonu + site adı) artık Admin → Ayarlar → Genel bölümünden değiştirilebiliyor. Daha önce panelde bir logo alanı bulunmadığından bu kısım sabit görünüyordu.

Yeni Site Logosu alanına logo yükleyebilir veya hazır bir görsel bağlantısı girebilirsiniz; logo yüklenince header ve footer'da otomatik kullanılır. Alanı boş bırakırsanız varsayılan görünüme (site adı) dönülür.

Düzeltildi Geliştirildi

Görsel yükleme 500 hatası giderildi (dosya seçince çökme)

Admin panelden haber, sunucu veya site (logo / arka plan) görseli yüklerken dosya seçildiğinde bazı hosting'lerde 500 Internal Server Error alınıyordu. URL ile görsel girmek çalışıyor, yalnızca dosya yükleme çöküyordu.

Sebep: Görsel doğrulama kodu fileinfo PHP eklentisine (finfo) bağımlıydı. Bu eklenti kapalı olan paylaşımlı hosting'lerde "Class/function not found" ölümcül hatası oluşuyordu. Ayrıca büyük telefon fotoğrafları, dosyanın tamamı belleğe okunurken düşük memory_limit'li sunucularda bellek taşmasına yol açabiliyordu.

Düzeltme: uploadFile() yardımcı fonksiyonu ve site ayarları yükleme akışı sağlamlaştırıldı:

  • fileinfo yoksa getimagesize() ile doğrulamaya düşülüyor — eklenti gerektirmiyor.
  • Dosya tek seferde değil, 64 KB'lık parçalar hâlinde taranıyor — büyük dosyalarda bellek taşması yok.
  • Yükleme klasörü yolu çalışma dizininden bağımsız çözülüyor; klasör yazılabilir değilse 500 yerine açık bir uyarı veriliyor.
  • Beklenmeyen her durumda kullanıcı artık 500 yerine anlaşılır bir mesaj görüyor.

Güvenlik kontrolleri (resim tipi doğrulama + zararlı kod taraması + rastgele dosya adı) korundu.

Link ile görsel ekleme notu: Imgur gibi siteler dışarıdan resim göstermeyi (hotlink) engeller; Hızlıresim gibi servislerin paylaşım linki de çoğu zaman resmin kendisi değil bir görüntüleme sayfasıdır. Link kullanacaksanız resme sağ tıklayıp "Resim adresini kopyala" ile .jpg / .png ile biten direkt bağlantıyı kullanın — ya da dosyayı doğrudan yükleyin.

Düzeltildi Kaldırıldı

Silinen ürün ve haberlerin geri gelmesi (hayalet demo içerik) giderildi

Admin panelden silinen ürün, kategori, rütbe veya haberler mağazada/sitede görünmeye devam edebiliyordu; haberler ise silindikten sonra kendiliğinden geri geliyordu. Bu "hayalet" kayıtlar admin panelinde görünmediği için silinemiyordu.

Sebep: Veritabanı boş kaldığında ekrana koda gömülü demo içerik basan "yedek" (fallback) blokları vardı (market.php, home.php, haberler.php). Ayrıca admin haber sayfası, haber tablosu boşaldığında örnek haberleri otomatik olarak veritabanına geri yazıyordu (seeder).

Düzeltme: Tüm sahte içerik blokları ve otomatik haber seeder'ı kaldırıldı. Artık mağaza/site yalnızca admin panelden eklenen gerçek içeriği gösterir; içerik yoksa düzgün bir "henüz içerik yok" mesajı çıkar. Silinen kayıt geri gelmez.

Hazır şablon korunuyor: Yeni kurulumlarda örnek ürün, kategori, rütbe ve haberler kurulum sırasında gerçek, düzenlenebilir ve silinebilir kayıt olarak gelmeye devam ediyor. İstemeyen yöneticiler bunları silebilir — bir daha geri gelmez.

Düzeltildi

Admin panelden kredi/bakiye verince "Data truncated" hatası giderildi

Admin panelden bir kullanıcıya kredi (bakiye) verildiğinde "SQLSTATE[01000]: Warning: 1265 Data truncated for column 'type'" hatası oluşuyor ve bakiye yüklenemiyordu. Tüm kurulumları etkileyen genel bir hataydı.

Sebep: balance_transactions tablosundaki type kolonu yalnızca deposit, purchase, refund, bonus değerlerini kabul ediyordu; admin bakiye düzenlemesi ise adjustment değerini yazmaya çalışıyordu. Bu değer listede olmadığı için MySQL kaydı reddediyor, işlem geri alınıyordu (bakiye de değişmiyordu).

Düzeltme: type kolonuna adjustment değeri eklendi — hem yeni kurulum şemasına hem de /update.php güncelleyicisine.

Halihazırda kurulu siteler için: Dosyaları güncelledikten sonra bir kez /update.php sayfasını admin olarak ziyaret edin — eksik enum değeri otomatik eklenir. Alternatif olarak phpMyAdmin / Adminer üzerinden tek seferde:

ALTER TABLE balance_transactions
  MODIFY COLUMN type ENUM('deposit','purchase','refund','bonus','adjustment') NOT NULL;
Düzeltildi

Yeni kurulumda kayıt formu hatası giderildi

Yeni kurulan sitelerde kayıt formu doldurulup gönderildiğinde "Kayıt sırasında bir hata oluştu. Lütfen tekrar deneyin." mesajı dönüyor, hesap oluşturulamıyordu. Eski kurulumlar bu sorundan etkilenmiyordu (/update.php aradan zaten yamayı uygulamıştı).

Sebep: install/database.sql içinde users tablosu oluşturulurken iki kolon eksikti — verification_token_expires (e-posta doğrulama linkinin geçerlilik süresi) ve pending_email (e-posta değişimi onayı için ara alan). Auth::register() kayıt sırasında bu iki kolona değer yazmaya çalışıyor, MySQL Unknown column hatası fırlatıyor, transaction geri alınıyor ve kullanıcıya genel hata mesajı dönüyordu.

Düzeltme: Eksik iki kolon install/database.sql'in users tablosu tanımına eklendi. Bundan sonra yeni install yapanlar kurulum sonrası ekstra adım gerekmeden kayıt formunu kullanabilir.

Halihazırda kurulu siteler için: bu yamadan önce kurulum yapıp henüz /update.php ziyaret etmemişseniz, bir kez /update.php sayfasını açın — eksik iki kolon otomatik eklenir. Alternatif olarak phpMyAdmin / Adminer üzerinden tek seferde:

ALTER TABLE users
  ADD COLUMN verification_token_expires DATETIME DEFAULT NULL,
  ADD COLUMN pending_email VARCHAR(120) DEFAULT NULL;
Eklendi

Mağaza & Kredi Yükleme geçmişi admin paneline eklendi

Admin panelde iki yeni sayfa: Mağaza Geçmişi ve Kredi Yükleme Geçmişi. Her birinde 4'lü istatistik kartları (tamamlanan, bekleyen, toplam gelir, günlük sayaç), arama/durum/ödeme yöntemi filtreleri ve sayfalama var.

  • Satın alımlar: tarih, kullanıcı, ürün, tutar (indirimli fiyat çizik), ödeme yöntemi, Minecraft teslim durumu.
  • Kredi yüklemeleri: yalnızca type='deposit' kayıtları; yönetici düzeltmeleri ayrı tutuluyor.

Her iki sayfa salt okunur — silme/düzenleme yok, geçmiş kaydı korunuyor.

Güvenlik Düzeltildi

Session cookie çakışması düzeltildi

Aynı alan adı altında birden fazla CMS veya başka bir PHP uygulaması çalıştığında, hepsinin varsayılan PHPSESSID cookie'sini paylaşması sonucu oturumlar arası $_SESSION['user_id'] sızıntısı oluşabiliyordu — kullanıcının farkında olmadan başkasının hesabına girmesine neden oluyordu.

Çözüm: Her kurulum artık dizin yoluna göre hash'lenmiş benzersiz bir session cookie adı kullanıyor (KB_CMS_<hash>). Dağıtılan her kopya otomatik olarak izole olur; admin tarafında yapılandırma gerekmez.

Güvenlik Eklendi Geliştirildi

Hesap güvenliği baştan aşağı sertleştirildi — logout, e-posta doğrulama, AuthMe dual-write

Oturum yönetimi, kimlik doğrulama ve hesap güvenliği için 6 kritik iyileştirme — bir hesabı ele geçirmeyi ciddi ölçüde zorlaştıran çok katmanlı koruma.

  • Çıkış artık gerçekten çıkıyor: oturum tamamen temizleniyor, "beni hatırla" cookie'si hem tarayıcıdan hem de auth_tokens tablosundan siliniyor. Aynı cihazdan kısa bir gözlemle geri dönüş artık mümkün değil.
  • Yeni: E-posta doğrulama sistemi. Kayıt olan kullanıcı e-postasına gönderilen linke tıklayana kadar hesap "doğrulanmamış" durumda. Mevcut tüm kullanıcılar otomatik olarak doğrulanmış sayılıyor — onlardan hiçbir aksiyon istenmiyor. Sahte e-posta ile spam hesap açılması engellendi.
  • E-posta değişikliği double opt-in: kullanıcı e-postayı değiştirirse onay linki yeni adrese gidiyor; link tıklanana kadar eski adres geçerli. Kısa bir cihaz erişimi ile hesap devralma (account takeover) saldırısı artık işe yaramıyor.
  • Kullanıcı adı Minecraft standardına hizalandı: kayıt formu en fazla 16 karakter kabul ediyor. Siteye kayıt olup sonra "sunucuya bağlanamıyorum" diyen kullanıcıların en yaygın sorunu çözüldü.
  • Site ↔ AuthMe dual-write: siteye kayıt olurken aynı anda Minecraft AuthMe tablosuna da hesap yazılıyor; biri başarısız olursa diğeri de iptal ediliyor — "yarım hesap" kalmıyor.
  • "Beni hatırla" token rotation: her otomatik girişte yeni bir token üretiliyor. Eski token ile tekrar giriş denenirse (çalıntı sinyali), sistem o kullanıcının tüm aktif oturumlarını iptal ediyor.

Deploy sonrası yapılacaklar:

  1. /update.php adresini bir kez ziyaret edin — users tablosuna 4 yeni kolon ekleniyor (is_verified, verification_token, verification_token_expires, pending_email).
  2. Admin panel → Ayarlar → SMTP alanlarının dolu olduğundan emin olun. Boşsa doğrulama e-postaları gönderilmez.
  3. Admin panel → Ayarlar → AuthMe credentials boş bırakılırsa site sadece kendi DB'sine yazar — AuthMe senkronu atlanır.
Geliştirildi Güvenlik

Alışveriş akışı güvenliği ve UX iyileştirmeleri

Sepet, bakiye transfer ve satın alma deneyiminde 4 kritik düzeltme — yanlış kişiye gönderim, URL'den bilgi sızıntısı ve kafa karıştırıcı hata mesajları giderildi.

  • Sepet ürün/kupon silme URL'den çıkarıldı: önceden CSRF token query string ile geçiyor, tarayıcı geçmişi ve sunucu loglarında görünüyordu. Artık POST gövdesinde — URL'de iz yok.
  • Bakiye gönderme 2 adımlı onay: kullanıcı önce alıcı ve miktarı giriyor; sonra avatar + nick + tutarın göründüğü bir onay ekranında açıkça "Evet, onaylıyorum" tıklaması gerekiyor. Yanlış yazılmış bir kullanıcı adı (ör. Ahmt) artık sessizce başkasının cebine bakiye göndermiyor.
  • "Teslim Bekleniyor" banner'ı: satın alma anında Minecraft sunucusu erişilemezse kullanıcı turuncu bir uyarı görüyor — "Ödemeniz alındı, kazanımınız sıraya girdi, sunucu aktif olunca otomatik teslim edilecek. 10 dakika sonra destek talebi açabilirsiniz." Altında direkt Destek Talebi Aç butonu.
  • Kupon hata mesajı düzgün: önceden "0,00 TL tutarı karşılanmadı" gibi anlamsız metin çıkıyordu; artık gerçek minimum tutar net yazıyor — "En az 100,00 TL tutarında alışveriş gereklidir".
Düzeltildi Güvenlik

Ölü linkler, ham hata sızıntısı ve arka plan sertleştirmeleri

Kullanıcıya görünen küçük düzeltmeler + "gözle görünmez" ama sitenin sağlamlığını artıran arka plan iyileştirmeleri.

  • Ana sayfa ölü linkleri düzeltildi: "Keşfet" butonu smooth scroll ile içeriğe iniyor; oyun modu "Play" butonları sunucu IP'sini panoya kopyalıyor. Önceden bu butonlar "sayfa bulunamadı" hatasına götürüyordu.
  • Teknik hata mesajları artık sızmıyor: kayıt/giriş sırasında oluşan SQLSTATE[HY000]: General error 2006 MySQL server has gone away gibi ham hatalar kullanıcıya gösterilmiyor. Kullanıcı sade bir "Bir hata oluştu, tekrar deneyin" mesajı görüyor; gerçek detay log dosyasına yazılıyor.
  • HTTPS zorunluluğu aktif: Strict-Transport-Security header'ı tarayıcılara "bu site ile sadece güvenli kanaldan konuş" diyor. Ortadaki adam (MITM) saldırılarına karşı ek koruma.
  • Süresi dolmuş auth_token temizliği: kendi kendini temizleme mantığındaki hata giderildi. auth_tokens tablosu artık şişmiyor, eski geçersiz kayıtlar düzenli olarak siliniyor.
Düzeltildi

Kritik fix turu — 500 hataları, parse ve şema problemleri kapatıldı

Canlıyı çökerten veya kullanıcıyı bloke eden 14 hata tek seferde giderildi.

  • tr.php parse hataları: 692. satırdaki yarım kalmış satır, 1809. satırdaki bozuk array kapatma ve 1792. satırdaki mojibake karakterleri temizlendi — site artık 500 ile çökmüyor.
  • Admin sonsuz yönlendirme döngüsü: .htaccess'teki RewriteBase kaldırıldı.
  • uploads klasörü LiteSpeed uyumsuzluğu giderildi; dosya yükleme LSWS sunucularda da çalışıyor.
  • Haberler sayfası 500 hatası — kategori parametresi ve bozuk HTML parse düzeltildi.
  • Sepet boş görünme: ranks tablosunda eksik minecraft_command sütunu eklendi.
  • Destek talebi oluşturma — eksik kapanış bracket sebebiyle oluşan PHP parse hatası giderildi.
  • Ticket dosya yükleme — şema uyumsuzluğu için 3 sütun eklendi (file_type, file_size, original_filename).
  • index.php üretim ortamında debug modu kapatıldı — hata mesajları artık kullanıcılara sızmıyor.
  • Beni Hatırla çalışmıyordu — auth_tokens.expires_at tip uyuşmazlığı düzeltildi.
  • LuckPerms senkronu şema çakışması giderildi, 5 dakikalık sync cache eklendi (her sayfa yüklenişinde DB sorgusu yapılmıyor).
  • Minecraft sunucu offline cache — geçici network hiccup'ta yanlış "offline" durumunun cache lenmesi engellendi.
  • Bakım modu artık giriş / çıkış / şifre sıfırlama sayfalarını istisna tanıyor.
  • Market rank sepete ekleme — aynı rütbenin birden fazla kez sepete düşmesi engellendi.
  • Sepet orphan satırları: silinmiş ürüne ait sepet kayıtları otomatik filtreleniyor.
Güvenlik

Güvenlik sıkılaştırma turu — CSRF, XSS, rate limit, timing-safe koruma

16 ayrı saldırı yüzeyi kapatıldı: double-spend, CSRF, XSS, brute force ve timing attack'lara karşı sertleştirme.

  • Checkout double-spend koruması: SELECT ... FOR UPDATE kilidi ile yarış koşulu engellendi.
  • Kupon session stale bug: kupon artık checkout anında DB'den yeniden okunuyor — session'daki eski durum kullanılmıyor.
  • Günlük ödül CSRF ve yarış koşulu koruması.
  • Admin store AJAX CSRF koruması — global guard + otomatik token enjeksiyonu.
  • Kullanıcı adı XSS açığı kapatıldı: 8 dosyada regex doğrulama + URL encode.
  • Transfer API idempotent yapıldı — failed, attempts, last_error sütunları; aynı komut iki kez çalışmıyor.
  • install/database.sql'de DROP TABLE komutları kaldırıldı, CREATE TABLE IF NOT EXISTS ile güvenli hâle getirildi.
  • Sepet kupon null deref hatası düzeltildi.
  • PayTR hash doğrulama artık hash_equals() ile — timing attack'a karşı güvenli.
  • Şifremi unuttum ve haber yorumu rate limit kazandı.
  • Profil şifre değiştirme — minimum 8 karakter zorunlu.
  • E-Pin kodu artık random_bytes() ile üretiliyor; entropi dramatik arttı.
  • Login rate limit fail-closed yapıldı — DB hatasında bile engelliyor.
  • Sepet ürün kaldırma URL artık CSRF token ile korunuyor.
  • Güvenlik header'ları eklendi: X-Frame-Options, Referrer-Policy, X-Content-Type-Options.
  • Admin bakiye güncelleme artık balance_transactions'a audit log kaydı yazıyor — kim, ne zaman, ne kadar.
Eklendi Geliştirildi

Yeni özellikler: Son Kredi Yükleyenler, Günlük Ödül, Pretty URL ve dahası

Anasayfaya sosyal kanıt bileşenleri, admin paneline kalite-of-life iyileştirmeleri ve mağaza akışına tatlandırıcı dokunuşlar.

  • Anasayfa "Son Kredi Yükleyenler" kutusu — son 10 bakiye yüklemesi canlı akar (PayTR, Shopier, E-Pin, Admin bonus).
  • Kredi yükleme kaynak rozeti — avatar köşesinde yöntemin ikonu; bir bakışta kaynağı belli.
  • Hareketli duyuru bandı canlı verilerle çalışıyor: satın alımlar, yüklemeler ve günlük ödüller. 30 saniyede bir yenileniyor.
  • Günlük Ödül sistemi tamamlandı:
    • Admin paneli aç/kapa toggle'ı.
    • Minimum ve maksimum TL aralığı ayarı.
    • Cubic bias matematik: düşük tutarlar sık, jackpot nadir — ekonomik dengeyi korur.
  • Ödeme Ayarları yeniden tasarlandı — her sağlayıcı kendi kartında (logo yerine ikon), aktif olan yeşil rozetle işaretli.
  • E-Pin listesi — her satırda kopyala butonu (Clipboard API + görsel geri bildirim); kodu elle seçmeye gerek yok.
  • Pretty URL sistemi yayında: ?page=X yerine /X; eski URL'ler 301 ile yönlendiriliyor — SEO bozulmuyor.
  • Admin empty state tasarımı standartlaştırıldı — Kuponlar sayfasındaki referans tasarım tüm admin listelerine uygulandı (ikon + başlık + alt metin + CTA).
  • ip-api konum servisi yeniden entegre edildi — kayıtlarda ülke / şehir bilgisi geliyor.
  • Footer sayfaları — "Sunucu Kuralları" ve "Ban Sorgula" seed kayıtlarıyla geldi.
  • robots.txt eklendi — admin, install ve gizli klasörler arama motorlarından hariç tutuldu.
Geliştirildi Değiştirildi

Yerelleştirme ve UI rötuşları — i18n, Türkçeleştirme, karakter kodlama

Türkçeleştirme, karakter kodlama (UTF-8 BOM / mojibake), eksik çeviriler ve küçük UI düzeltmeleri.

  • Kapsamlı i18n taraması: 1.219 dil anahtarı kontrol edildi; Türkçe'de 7, İngilizce'de 10 eksik anahtar bulunup eklendi.
  • __() fonksiyonuna sprintf desteği — "%s tarafından" gibi dinamik metinler güvenle çevirilebiliyor.
  • Gizlilik Politikası — 25 eksik Türkçe çeviri tamamlandı.
  • Şifremi Unuttum ve Şifre Sıfırla sayfaları tamamen i18n'leştirildi.
  • Tarih formatı artık dil-duyarlı: EN kullanıcısı "April 20, 2026", TR kullanıcısı "20 Nisan 2026" görüyor.
  • bakiye-yukle.php — bozuk Türkçe karakterler (mojibake) temizlendi.
  • UTF-8 BOM temizliği: 8 dosyadan Byte Order Mark kaldırıldı (PHP header problemlerine yol açıyordu).
  • Türkçeleştirme: Rank → Rütbe, Member → Oyuncu.
  • Destek mesajları balon tasarımı — kullanıcı sağda, admin solda; mesajlaşma uygulaması benzeri görünüm.
  • "High" öncelik etiketi Türkçeleştirildi ("Yüksek").
  • Font Awesome ikon prefix fix — eski fa- kalıpları fas fa- / far fa-'a güncellendi; boş kutucuk olarak görünen ikonlar düzeldi.
  • SSS tekrar sorular temizlendi + UNIQUE INDEX — aynı soru iki kez eklenemez.
  • Admin sayfa başlığı altındaki açıklama hizalaması — negatif margin-top: -25px kaldırıldı.
  • Footer Gizlilik / Koşullar linkleri arasına okunabilirlik boşluğu eklendi.
  • Profil sayfa geçişleri artık en üstten başlıyor (eski scroll pozisyonunu korumuyor).
  • Kritik admin ayarlarının boş kaydedilmesi yasaklandı — site başlığı, ödeme credentials gibi alanlar boş bırakılamaz.
  • Footer copyright artık date('Y') dinamik — sabit 2025 yerine güncel yıl.
Düzeltildi

32 hatalık toplu yama yayınlandı

2-3 Mart bug avı turunda bulunan tüm kritik, yüksek ve orta öncelikli açıklıklar tek bir sürümle kapatıldı. Sync, mağaza hesaplamaları, ödeme webhook tekrar-oynatma koruması dahil. Detay için sürüm yükseltme sayfasına bakın.

Geliştirildi Değiştirildi

Sync optimizasyonu — %80+ yük azalması

Anlık fire-and-forget sync yerine 5 dakikalık kuyruk + delta sync. Bulutla olan sorgu sayısı dramatik şekilde düştü; küçük düzenlemeler artık tek tek değil toplu gönderiliyor.