AyhanHUB
Bu site artık salt okunur.
Neler Yeni?

Neler Yeni?

2026-10-25 agg1401

AyhanHUB sürekli gelişiyor. İşte son eklenenler ve yolda olanlar.

AyhanHUB sürekli gelişiyor. İşte son eklenenler ve yolda olanlar.


Arşiv

→ Neler Yeni? — Hafta #02 · 13 Ekim – 16 Ekim arası tüm günceler dosyada. → Neler Yeni? — Hafta #02 · 05 Ekim – 11 Ekim arası tüm günceler dosyada. → Neler Yeni? — Hafta #01 · 28 Eylül – 04 Ekim arası tüm günceler dosyada.


25 Ekim 2026 - Pazar

YouTube entegrasyonu: izletiler + kanala yönlendirme

YouTube / Instagram yönlendirme kartı

  • İzletilerin hemen altına minimalist sosyal medya kartı eklendi: YouTube ve Instagram butonlarıyla ziyaretçiyi doğrudan kanala / profile çekiyor — ana sayfadaki trafiğin kanala taşındığı temiz bir döngü.
  • URL'ler tek kaynaktan: butonlar Ayarlar > Sosyal Bağlantılar tablosundaki bi-youtube / bi-instagram satırlarından besleniyor; panelden linki değiştirince kart kendiliğinden güncelleniyor. YouTube satırı olmazsa CV'deki kanal adından türetiliyor, ikisi de yoksa kart hiç basılmıyor.
  • Kart, temanın beyaz + teal dilinde; solda teal şerit, mobilde butonlar tam genişlik.

İstatistik düzeltmeleri: ön yüz ↔ panel uyumu

Paneldeki istatistik ile ön yüzdeki sayımlar tutmuyordu; iki kök neden bulunup düzeltildi.

Ön yüzdeki sayaçlar paneldekiyle aynı değil

  • Novel detay sayfasındaki bölüm satırları okunma sayısını eski number anahtarıyla (1-7) okuyordu; sayaçlar ise kanonik gpn anahtarına (101-107) yazılıyordu — ilk 7 bölümün satırı eski/altyanlı sayıyı gösterirken okuma sayfası doğru sayıyı gösteriyordu. Artık novel sayfası da gpn okuyor: /novel/x ile /novel/x/bolum/y aynı sayıyı gösteriyor. Sezon şeması öncesi eski /bolum/5 adresleri de 101'e normalize ediliyor, sayaç tek dosyada toplanıyor.
  • Çifte sayım giderildi: bölüm sayfası hem doğrudan recordView çağırıyor hem de stats_record köprüsü aynı sayaç dosyasını farklı bir anahtarla ikinci kez yazıyordu — her ziyaretçi dosyaya iki satır atıyor, "okunma" sayısı ~2 kat şişiyordu. Köprü artık anahtarı parçalayıp aynı dosyaya tek satır yazıyor (tekil ziyaretçi = 1 satır).

Bölüm ziyaretleri panelde sayılmıyordu

  • Misafir önbelleği HIT'inde şablon hiç çalışmaz; kapanış kaydı o ziyareti her zaman boş slug'lı "sayfa" satırına yazıyordu — son 25 günlük veride 1.503 satır bu türden, buna karşılık panelin tür kırılımında yalnızca 92 bölüm satırı. Bölüm/novel/blog ziyaretleri panelden kaçırılıyordu. Kapanış kaydı artık adres yolundan tür + slug çıkarıyor (/novel/x/bolum/y → bölüm, /novel/x → novel, /blog/y → blog, /portfolio/y → proje, /sayfa/y → sayfa) ve bölüm slug'ını kanonik gpn ile yazıyor. Böylece panel kırılımı ile ön yüzdeki "okunma" rozetleri artık aynı ziyaret akışından besleniyor; önbellekli ziyaretler de görüntülenme sayaçlarına işliyor.
  • Misafir önbelleği bayatlandı (eski sayımlar HTML'e gömülüydü; ilk ziyarette taze sayfa üretilir). Geçmişte biriken çift anahtar satırları ve boş slug'lı ziyaret satırları temizlenmedi — veri kaybı olmasın diye öyle bırakıldı; düzeltmeler bugünden itibaren geçerli.

24 Ekim 2026 - Cumartesi

GÜVENLİK SERTLEŞTİRMESİ + SON PHP CVE İNCELEMESİ

Güvenlik sertleştirme turu + doğrulama + son PHP CVE incelemesi. Bu giriş şeffaflık içindir: yapılanlar ve yapılmayanlar / bilinçli bırakılanlar ayrı ayrı yazılıdır.

1) Yapılan sertleştirmeler

Panel / kimlik doğrulama

  • Brute-force koruması (admin/_lib.php): IP + kullanıcı bazlı sayaç, 5 yanlış denemede 15 dk kilit, başarısız denemede 0.4–0.9 sn rastgele gecikme. Sayaçlar data/bruteforce/ altında.
  • *Ham `/admin/istekleri 404** (.htaccess): config'teki yorum satırı kuralı vaat ediyordu ama.htaccess'te yoktu; panel artık yalnız/ty_admin` üzerinden erişilir.
  • GET ile silme kapatıldı: mod-blog, mod-sayfalar, mod-reklamlar, mod-yorumlar, mod-yonlendirmeler, mod-projeler, mod-galeri ve plugins/authors/admin.php artık yalnız POST + CSRF silir (panel_sil_talep() / panel_sil_form()).
  • Çıkış (?cikis=1) POST + CSRF'ye çevrildi (CSRF ile oturum kapatma engellendi).
  • Tema/PHP dosya düzenleme kapatıldı (core/bootstrap.php): php yazma beyaz listesinden çıkarıldı; cms_write_theme_file() hiçbir dosyayı yazmıyor (çağıranları aranmıştı — tanımdan başka kullanım yoktu).

Giriş uçları / girdi doğrulama

  • isLocalHost() düzeltildi (includes/fn-core.php): HTTP_HOST ile strpos(...,'localhost') kontrolü kaldırıldı — saldırgan Host: localhost yazarak hCaptcha'yı atlatamıyor. Yerel mod yalnız sunucu IP'si (+ HEXABEE_LOCAL bayrağı) ile belirlenir.
  • Yorum slug regex'i (plugins/comments/post.php): ^(page_|blog_|portfolio_)?[a-z0-9-]+$ — dizin gezinme yolu kapandı.
  • Sahte yorum başlıkları: içerikte satır başındaki #ler #ya çevriliyor; ### sahte-id — admin — tarih blok başlığı oluşturulamıyor.
  • Yorum hız sınırı IP bazlı: eski kontrol yalnız oturum çerezine bakıyordu (çerez atlanıyordu).
  • Parsedown setSafeMode(true) (plugins/authors/templates/detail.php) — biyografi XSS'i.
  • img.php: piksel kontrolü decode'dan önce (zip-bomba bellek koruması), kalite sabit liste (60/80) — serbest ?q=1..100 önbellek şişirme kapısı kapatıldı.
  • mod-galeri silme yol kontrolüne dizin ayracı eklendi (kardeş-kök kaçışı, strpos === 0). Host başlığı / önbellek zehirlenmesi
  • cms_canonical_base() + cms_host_allowed() eklendi: getCurrentUrl(), cms_jsonld_host(), og:image (theme header_meta), sitemap mutlak URL'leri artık SITE_URL / doğrulanmış Host'tan.
  • hx_cache_key() host'u anahtara kattı: önbellek host başına ayrıldı; sahte Host'la üretilen yanıt başka ziyaretçiye servis edilemiyor.
  • Yükleme / dosya SVG: 4 kopya regex "temizliği" tek DOM tabanlı beyaz liste panel_svg_sanitize() ile değiştirildi (script/foreignObject/on*/javascript:/data:/style URL temizliği, XXE için LIBXML_NONET); parse edilemeyen SVG yüklenmiyor. Ayrıca assets/.htaccess + kök .htaccess içinde SVG'ler için CSP sandbox başlığı.
  • Yedek geri yükleme: arşiv girdileri tek tek doğrulanıyor — .php, config.php, .., mutlak yol, profil dışı yol reddediliyor (zip ve tar.gz/phar dalları).

Oturum / yapılandırma

  • Çerez secure artık dinamik (HTTPS'te true); oturum klasörü docroot dışına taşındı (../hx_sessions; yazılamazsa data/sessions); HEXABEE_SESSION_DIR temizleyiciyle eşleşiyor.
  • php.ini: session.upload_progress.enabled = Off, display_errors = Off, expose_php = Off.
  • .htaccess (mod_php): php_flag session.upload_progress.enabled off — hangi php.ini yüklenirse yüklensin istek ayrıştırmasından önce kapanır (bkz. CVE bölümü).

Altyapı

  • PHP yürütme engeli: data/, assets/, plugins/, core/, includes/, themes/ için ayrı .htaccess (giriş noktaları index.php/router.php/img.php/admin/ etkilenmedi).
  • mkdir(..., 0777) → 0755: 11 dosyadaki 18 çağrı.
  • Webhook curl: CURLOPT_PROTOCOLS http/https + redirect kısıtı (SSRF).

2) Testler ve sonuçları (şeffaf)

Test Araç Sonuç
Sözdizimi XAMPP PHP 8.2.12, php -l (27 düzenlenen dosya) Hepsi temiz
Davranış birim testleri tools/_sertlestirme_test.php 27/27 PASS
Uçtan uca HTTP PHP yerleşik sunucu: /, /index.php, /admin/index.php HTTP 200, 0 fatal/warning
Brute-force (gerçek HTTP) 5 yanlış POST + 6. istek 6. istekte "15 dakika kilitlendi" ✓
CSRF reddi Yanlış token'lı POST "Oturum doğrulaması başarısız" ile kesiliyor ✓
Yedek geri yükleme Kötü arşiv (config.php + data/*.php) / temiz arşiv Reddedildi / geri yüklendi ✓
Oturum docroot dışı session_save_path() docroot dışı klasör ✓

Test sırasında bulunan ve DÜZELTİLEN 2 gerçek hata (ikisi de yedek geri yüklemede):

  1. Phar girdi yolu phar://<tam yol>/... dönüyordu, kırpma desenim arşiv adını başta bekliyordu → her tar.gz yedeği "profil dışı yol" ile reddedilirdi. Prefiks + arşiv-adı işaretçisi + Windows 8.3 kısa yol yedeği ile düzeltildi.
  2. backup-manifest.json (her yedekte kökte) profil-dışı kurala takılıyordu — muaf bırakıldı.

Test edilemeyenler (dürüst liste):

  • Panelde başarılı giriş ve silme/çıkış butonlarının gerçek oturumla e2e akışı (ADMIN şifresi bilinmediği için) — birim testleri + lint kapsıyor, panelde bir kez elle denemen önerilir.
  • nginx: nginx-taveyoka.conf'e /admin 404 + PHP yürütme engeli eklenmedi (yalnız Apache .htaccess hedeflendi). nginx kullanılıyorsa eklenir.

3) Son PHP CVE incelemesi — sitemde var mı?

Tespit edilen son kritik açıklar (PHP, 21–22 Ekim 2026 güvenlik sürümü)

CVE Şiddet Açık sürümler Sabit sürüm Yol
CVE-2026-109618 CVSS 9.2 8.2 < 8.2.35, 8.3 < 8.3.36, 8.4 < 8.4.27, 8.5 < 8.5.12 8.2.35 vb. Bellek taşması (OOM) sırasında hafıza bozulması → RCE; multipart/form ayrıştırma (dosya yükleme) tetikleyici
CVE-2026-109619 CVSS 9.2 Aynı aralıklar Aynı Worker'da kalan bayat durum → RCE; session.upload_progress doğrulanmış giriş yolu (uygulama session_start() çağırmadan çalışır)
CVE-2026-115560 RCE (detay yok) Bilinmiyor Sıradaki düzeltme sürümünde PHP "olağandışı yapılandırma" diyor; geçici önlem: session.upload_progress=0
CVE-2026-6103 Orta (yerel) < 8.2.34 / 8.3.35 / 8.4.26 / 8.5.11 8.2.34 vb. Phar TAR sayı taşması → sahte arşiv girdisi enjeksiyonu
Eylül seti (91765–93682, 17545...) çeşitli < 8.2.34 vb. 8.2.34 vb. FPM ACL, OpenSSL doğrulama, SOAP yığın taşması, HTTP stream...

Sitenin durumu

  • Yerel (XAMPP): PHP 8.2.12 → EVET, AÇIK. 8.2.35'in altında; tablodaki tüm 2026 CVE'lerine (109618/109619/6103 + Eylül seti + 2025'in 8.2.28 düzeltmeleri) açık. XAMPP'ın php.ini'si proje php.ini'si olmadığı için geçici azaltmalar orada henüz geçerli değil. En kısa zamanda Laragon'a geçilecek. Üretim (ayhanhub.com.tr, cPanel): PHP 8.4 (ea-php84) — kontrol edildi ve yükseltildi. Sitede "PHP 8.4" yazıyordu; cPanel → MultiPHP Manager üzerinden sürüm doğrulandı ve 8.4'e çekildi. PHP ChangeLog'daki düzeltmelerle teyit edildi: 8.4.27 sürümü, CVE-2026-109618 ve CVE-2026-109619 (RCE) ile CVE-2026-6103 (Phar TAR) açıklarını kapatıyor. Üretim bu sürümün üzerinde olduğu için ilgili CVE'ler kapalı. Sürüm bilinmiyor değil, biliniyor ve gerekli sürüme çekildi.

Bu turda yapılan azaltmalar (yamayı değiştirmez, yalnız riski düşürür)

  1. session.upload_progress.enabled = Off — hem proje php.ini'sinde hem .htaccess (mod_php) içinde → 109619 + 115560 için PHP'nin resmi geçici önlemi. Bu ayar firma tarafından kapatıldı.
  2. display_errors = Off, expose_php = Off — bilgi sızıntısı azaltması. Bu ayar firma ve Taveyoka tarafından kapatıldı.
  3. Zaten vardı: 4 MB uygulama yükleme sınırı, post_max_size/upload_max_filesize 10M, img.php 128 MP tavanı (109618 için istek büyüklüğü sınırlaması tarafı).
  4. Yedek girdi doğrulama → CVE-2026-6103'e karşı savunma derinliği (panelde arşiv yükleme ucu yok; yine de zararlı data/backups/ içine konan bir .tar.gz artık açılamaz).

4) Açık kalanlar / bilinçli kararlar

  1. PHP sürüm güncellemesi YAPILMADI (sunucu yönetimi gerektirir) — en yüksek öncelikli açık madde. Yerel 8.2.12 de dahil. Localhost için geçerli ama zaten bir kaç gün içinde Wampp Server'a geçeceğim.
  2. nginx konfigürasyonu güncellenmedi (nginx-taveyoka.conf) — yalnız .htaccess hedeflendi.
  3. CSP unsafe-inline KORUNDU (bilinçli): 20 dosya satır içi <script>, 11 dosya satır içi event handler, 49 dosya satır içi stil yayıyor (heartbeat, JSON-LD, karanlık-mod, Cherry, eklenti CSS'i, panel formları). Kaldırmak nonce/hash altyapısı + tüm yayıcıların dönüşümünü gerektirir — ayrı iş. .htaccess'te notu var.
  4. php.ini değişiklikleri cPanel'de doğrulanmalı: dosyanın başlığı "MultiPHP INI Editor kullan" diyor; dosya yüklenmiyorsa ayarlar geçersiz olur. .htaccess'teki php_flag bunu mod_php'de sigortalar.
  5. memory_limit=-1 uygulanmadı: PHP, 109618 için geçici önlem olarak bunu öneriyor (OOM yolunu kapatmak için), ama paylaşımlı hostingde DoS takası var — bilinçli olarak bırakılmış bir karar.
  6. Eski yedekler config.php içeriyorsa panel geri yükleme reddedecek (istenen davranış: ADMIN_HASH/PASS_PEPPER ele geçirilemesin). Elle/FTP'den açmak gerekir; yeni yedekler de almaya devam eder.
  7. Panel başarılı girişi / silme butonları e2e test edilmedi (şifre bilinmiyor) — birim testleri + lint kapsıyor; panelde bir kez elle doğrula.

Kaynaklar (24 Ekim 2026'da okundu):**

  1. CVE-2026-109618
  2. CVE-2026-109619
  3. CVE-2026-6103
  4. CERT-EU 2026-018
  5. PHP ChangeLog

19 Ekim 2026 - Pazartesi

SİLİNDİ

  • Forum sayfası ve AyhanBB projesi kalıcı silindi. Zaten kullanan yok idi.
Bu içeriği paylaş
Soru Sor