import streamlit as st import os import pickle import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel # ========================================== # 🛡️ GLOBAL PREMİUM SİSTEM AYARLARI # ========================================== st.set_page_config( page_title="CyberNLP Tehdit Analiz Konsolu", page_icon="🛡️", layout="centered", initial_sidebar_state="collapsed" ) MODEL_NAME = "ehsanaghaei/SecureBERT" MAX_LEN = 200 # Lüks Kurumsal UI Tasarımı (Vercel Dark & Cyber Intelligence Theme) st.markdown(""" """, unsafe_allow_html=True) # ========================================== # 📚 AKADEMİK TÜRKÇE CWE BİLGİ BANKASI # ========================================== CWE_DICT = { "CWE-79": { "name": "Siteler Arası Betik Çalıştırma (Cross-Site Scripting - XSS)", "description": "Uygulamanın, kullanıcı tarafından sağlanan girdileri tarayıcının DOM modelinde çalıştırmadan önce yetersiz şekilde sterilize etmesi veya filtrelememesi durumudur. Saldırganların istemci tarafında zararlı script çalıştırmasına yol açar.", "impact": "Oturum çalma (Session Hijacking), kimlik doğrulama mekanizmalarının atlanması, çerez verilerinin sızdırılması ve kullanıcı taklidi.", "mitigation": "Girdilerin basılacağı bağlama uygun (HTML gövdesi, nitelikler, JavaScript bağlamı) çıktı kodlaması (Output Encoding) uygulanmalı ve katı bir İçerik Güvenliği Politikası (CSP) devreye alınmalıdır." }, "CWE-89": { "name": "SQL Komutlarındaki Özel Öğelerin Hatalı Temizlenmesi (SQL Injection)", "description": "Kullanıcıdan alınan verilerin önceden parametreleştirilmeden doğrudan ilişkisel veritabanı sorgularına dahil edilmesi durumudur. Çalışma zamanı sorgu mantığının manipüle edilmesine neden olur.", "impact": "Veritabanındaki tüm hassas verilere yetkisiz erişim, veri sızıntısı, yapısal tabloların silinmesi ve veritabanı kabuk eklentileri üzerinden işletim sisteminde komut çalıştırılması.", "mitigation": "Tüm veritabanı etkileşimlerinde parametrik sorgular (Prepared Statements) kullanılmalı, ORM çerçeveleri optimize edilmeli ve girdi beyaz listeye tabi tutulmalıdır." }, "CWE-862": { "name": "Eksik Yetkilendirme (Missing Authorization)", "description": "Uygulamanın, kritik iş mantığı veya veri işlemlerini yürütmeden önce, çağrıyı yapan aktörün rollerini ve ayrıcalıklarını sunucu tarafında doğrulamaması hatasıdır.", "impact": "Yatay ve dikey yetki yükseltme (Privilege Escalation), diğer kullanıcıların verilerine yetkisiz erişim ve kritik sistem yapılandırmalarının değiştirilmesi.", "mitigation": "Merkezi bir erişim kontrol modeli (RBAC veya ABAC) uygulanmalı, her API uç noktası ve durum değişikliği sunucu tarafında doğrulanmalıdır." }, "NVD-CWE-noinfo": { "name": "Yetersiz Bilgi / Sınıflandırılamayan Yapısal Güvenlik Açığı", "description": "Zafiyet bildiriminde veya üretici tavsiyesinde, hatanın tam olarak hangi yapısal CWE kategorisine ait olduğunu belirleyecek derinlikte teknik detayın bulunmaması durumudur.", "impact": "Sistem mimarisine bağlı olarak değişkenlik gösterir; mantıksal bozulmalardan hizmet kesintilerine kadar geniş bir etki alanına sahip olabilir.", "mitigation": "Üretici yama notları yakından takip edilmeli, üçüncü parti bağımlılıklar güncellenmeli ve genel güvenli çalışma zamanı sıkılaştırmaları uygulanmalıdır." }, "CWE-74": { "name": "Çıktıdaki Özel Öğelerin Hatalı Temizlenmesi (Genel Enjeksiyon)", "description": "Dışarıdan sağlanan parametrelerin, komut kanallarına veya yorumlayıcı hatlarına, parametre ve komut ayrımı yapılmaksızın doğrudan aktarılması durumudur.", "impact": "Alt sistem bileşenlerinde mantıksal akışın ele geçirilmesi ve veri kanallarının manipülasyonu.", "mitigation": "Kullanıcı verileri alt süreçlere aktarılmadan önce güçlü veri tipi kapsülleyicileri (strong syntax typing) ve katı ayrıştırma katmanlarından geçirilmelidir." }, "CWE-352": { "name": "Siteler Arası İstek Sahteciliği (Cross-Site Request Forgery - CSRF)", "description": "Web uygulamasının, işlemler için yalnızca tarayıcının kalıcı kimlik belirteçlerine (Çerezler) güvenmesi ve istemcinin bu isteği bilinçli olarak yapıp yapmadığını doğrulamaması durumudur.", "impact": "Kullanıcının haberi olmadan kritik hesap ayarlarının değiştirilmesi, yetkisiz para transferleri veya hesap ele geçirme senaryoları.", "mitigation": "Durum değiştiren tüm HTTP isteklerine benzersiz ve kriptografik anti-CSRF token'ları eklenmeli, çerezler için 'SameSite=Strict' özniteliği zorunlu kılınmalıdır." }, "CWE-22": { "name": "Dizin Geçişi / Dosya Yolunun Hatalı Sınırlandırılması (Path Traversal)", "description": "Dosya erişim operasyonlarında kullanıcıdan alınan yol argümanlarının sınırlandırılmaması nedeniyle, saldırganın nokta-nokta-slash ('../') dizilerini kullanarak kök dizin dışına çıkabilmesi hatasıdır.", "impact": "İşletim sistemi yapılandırma dosyalarının, kaynak kodların ve hassas sistem verilerinin yetkisiz aktörler tarafından okunması veya sızdırılması.", "mitigation": "Girdi olarak doğrudan dosya yolları kabul edilmemeli, absolute/canonical yollar sunucu tarafında çözülmeli ve uygulama dizin görünürlüğü kısıtlanmalıdır." }, "CWE-416": { "name": "Serbest Bırakıldıktan Sonra Bellek Kullanımı (Use After Free)", "description": "Yerel yazılım yürütme katmanında, dinamik olarak ayrılan bir bellek bloğunun serbest bırakılmasından (free) sonra, ilgili bellek işaretçisinin (pointer) hala referans alınmaya devam etmesi hatasıdır.", "impact": "Uzaktan rastgele kod çalıştırılması (RCE), bellek bütünlüğünün bozulması, yerel yetki yükseltme ve kararsız sistem çökmeleri.", "mitigation": "Bellek yönetimini otomatik gerçekleştiren akıllı işaretçiler (smart pointers) kullanılmalı veya deallocate edilen işaretçiler anında NULL durumuna çekilmelidir." }, "CWE-125": { "name": "Sınırların Dışında Bellek Okuma (Out-of-bounds Read)", "description": "Yazılım algoritmasının, kendisine ayrılan tampon bellek (buffer) sınırlarının dışındaki komşu bellek adreslerinden veri okumaya çalışması durumudur.", "impact": "Bellekteki diğer süreçlere ait gizli verilerin, kriptografik anahtarların ve oturum bilgilerinin sızıntısı (Örn: Heartbleed mantığı).", "mitigation": "Otomatik sınır kontrolü yapan kütüphaneler tercih edilmeli, yerel kodlar AddressSanitizer (ASan) katmanları ile denetlenerek derlenmelidir." }, "CWE-284": { "name": "Hatalı Erişim Kontrolü (Improper Access Control)", "description": "Yazılım mimarisinin, erişim kontrol görünürlük sınırlarını düzgün tanımlayamaması nedeniyle kimlik doğrulaması yapılmamış aktörlerin korumalı alanlara erişebilmesidir.", "impact": "Veri ifşası, yetkisiz veri manipülasyonu ve çok kiracılı (multi-tenant) sistemlerde izolasyon ihlalleri.", "mitigation": "Sistem genelinde 'En Düşük Ayrıcalık İlkesi' (Principle of Least Privilege) uygulanmalı, erişim matrisleri veri sahipliği ile eşleştirilmelidir." }, "CWE-119": { "name": "Bellek Arabelleği Sınırlarının Hatalı Kısıtlanması (Arabellek Taşması Atası)", "description": "Yazılımın bellek blokları üzerinde işlem yaparken, gelen veri boyutunun ayrılan alana sığıp sığmadığını doğrulamadan kopyalama veya yazma işlemi yürütmesidir.", "impact": "İşlem akışının (control flow) değiştirilmesi, hizmet kesintileri (Denial of Service) veya sistem üzerinde tam yetkiyle kod çalıştırılması.", "mitigation": "Boyut kontrolü barındırmayan güvensiz eski fonksiyonlar (strcpy, gets vb.) tamamen terk edilerek güvenli API alternatiflerine geçilmelidir." }, "CWE-787": { "name": "Sınırların Dışında Bellek Yazma (Out-of-bounds Write)", "description": "Uygulamanın, tanımlanan bellek sınırının dışındaki alanlara veri yazarak komşu bellek bloklarını, işaretçileri veya fonksiyon geri dönüş adreslerini manipüle etmesidir.", "impact": "En kritik güvenlik ihlallerinden biridir; doğrudan uzaktan kod çalıştırma (RCE) ve tam sistem ele geçirme imkanı tanır.", "mitigation": "Sınır kontrollü koleksiyon yapıları zorunlu kılınmalı, derleme aşamasında Stack Canaries ve ASLR gibi işletim sistemi korumaları aktif edilmelidir." }, "CWE-476": { "name": "NULL Gösterici Başvurusu (NULL Pointer Dereference)", "description": "Yazılım yürütme hattının, geçerli bir bellek adresini işaret ettiğini varsaydığı ancak gerçekte NULL değerine sahip olan bir işaretçiyi okumaya veya çalıştırmaya zorlanmasıdır.", "impact": "Uygulamanın anında çökmesi, sunucu kararsızlığı ve dağıtık hizmet dışı bırakma (DoS) durumları.", "mitigation": "İşaretçiler referans alınmadan önce conditional block'lar ile geçerlilik kontrolüne tabi tutulmalı veya modern dillerdeki Optional yapıları kullanılmalıdır." }, "CWE-200": { "name": "Hassas Bilgilerin Yetkisiz Bir Aktöre İfşası (Information Disclosure)", "description": "Uygulamanın; sistem yapılandırmalarını, hata çıktılarını, veritabanı şemalarını veya kriptografik özetleri istemeden dış gözlemcilere sızdırması durumudur.", "impact": "Saldırganlar için hedef sistem mimarisi hakkında istihbarat sağlama, sonraki hedefli saldırıların haritasını çıkarma imkanı.", "mitigation": "Kullanıcıya gösterilen hata arayüzleri jenerik tutulmalı, detaylı hata logları yalnızca güvenli dahili sunucu dosyalarında saklanmalıdır." }, "CWE-78": { "name": "İşletim Sistemi Komut Enjeksiyonu (OS Command Injection)", "description": "Kullanıcıdan alınan parametrelerin doğrudan işletim sistemi kabuk yorumlayıcılarına (shell) aktarılması ve girdi içindeki sistem metakarakterlerinin ayıklanmaması hatasıdır.", "impact": "Sunucu işletim sisteminde tam kontrol sağlama, tersine kabuk (Reverse Shell) bağlantısı kurma ve iç ağda yatay ilerleme (Lateral Movement).", "mitigation": "Sistem düzeyinde kabuk süreçleri başlatılmamalı; bunun yerine dilin kendi yerel, doğrulanmış API kütüphaneleri kullanılmalıdır." }, "CWE-20": { "name": "Hatalı Girdi Doğrulaması (Improper Input Validation)", "description": "Uygulama yazılımının; dışarıdan gelen verilerin uzunluk, şema tipi, değer aralığı veya karakter seti gibi katı kurallara uygunluğunu denetlemeden işleme alması hatasıdır.", "impact": "Alt katmanlardaki iş mantıklarının bozulması, veri tipi dönüşüm hataları ve kaynak tükenmesi zafiyetleri.", "mitigation": "Veri akış hattının en dış giriş noktalarında katı pozitif doğrulama şemaları (Beyaz Liste kontrolü) zorunlu tutulmalıdır." }, "CWE-94": { "name": "Kod Üretiminin Hatalı Kontrolü (Code Injection / RCE)", "description": "Uygulamanın, dışarıdan gelen dinamik metin dizilerini doğrudan kendi çalışma zamanı yorumlayıcı motorunda (`eval`, `unserialize` vb.) kod parçası gibi çalıştırması hatasıdır.", "impact": "Saldırganın, uygulamanın çalıştığı kullanıcı haklarıyla sunucu üzerinde anında rastgele kod yürütmesini sağlar.", "mitigation": "Kullanıcı verileri üzerinde dinamik kod yorumlama çağrıları kesinlikle kullanılmamalı; parametrik mantık tabloları tercih edilmelidir." }, "CWE-918": { "name": "Sunucu Taraflı İstek Sahteciliği (Server-Side Request Forgery - SSRF)", "description": "Uygulama sunucusunun, dışarıdan gelen bir URL parametresini kullanarak arka planda network istekleri göndermesi ve hedef destinasyonu doğrulamaması hatasıdır.", "impact": "İç ağ altyapısının taranması, dışa kapalı firewalWAF kurallarının delinmesi ve bulut sunucu metaveri servislerine (IMDSv2) erişilerek kimlik bilgilerinin çalınması.", "mitigation": "Kullanıcı tanımlı URL yönlendirmeleri sınırlandırılmalı, sunucunun outbound network çıkışlarına katı IP beyaz listeleri uygulanmalıdır." }, "CWE-77": { "name": "Komut Yapısının Hatalı Düzenlenmesi (Command Injection)", "description": "Yazılımın, harici verileri belirli kurallara göre yorumlanan yapısal bir komut ifadesine dönüştürürken parametre sınırlarını koruyamamasıdır.", "impact": "Sorgu veya komut mantığının dışarıdan değiştirilmesi ve yetkisiz mantıksal eylemlerin tetiklenmesi.", "mitigation": "Güçlü parametre ayrıştırma algoritmaları uygulanmalı ve komut yapıları statik şablonlar olarak kilitlenmelidir." }, "CWE-121": { "name": "Yığın Tabanlı Arabellek Taşması (Stack-based Buffer Overflow)", "description": "Belleğin 'Stack' bölgesinde ayrılmış sabit boyutlu yerel değişken alanlarına, boyut kontrolü yapılmaksızın veri yazılması ve fonksiyon dönüş adreslerinin ezilmesidir.", "impact": "İşlemci kayıtçılarının (register) yönlendirilmesi, zararlı makine kodlarının çalıştırılması ve tam sistem manipülasyonu.", "mitigation": "Statik kod analiz araçları ile geliştirme süreçleri denetlenmeli, modern bellek güvenli diller veya API'ler entegre edilmelidir." }, "CWE-434": { "name": "Tehlikeli Türdeki Dosyaların Kısıtlanmasız Yüklenmesi (Unrestricted File Upload)", "description": "Sisteme dosya yükleme arayüzünün, gelen dosyaların uzantılarını, içerik türlerini veya kod yapılarını denetlemeden doğrudan sunucu disk alanına yazması hatasıdır.", "impact": "Sunucu dizinlerine kalıcı web kabukları (Webshell) yüklenmesi ve HTTP üzerinden çağrılarak uzaktan kod yürütülmesi (RCE).", "mitigation": "MIME tipi ve sihirli bayt (magic bytes) kontrolleri yapılmalı, dosya isimleri sunucu tarafından rastgele yeniden adlandırılmalı ve non-executable alanlarda saklanmalıdır." }, "CWE-502": { "name": "Güvenilmeyen Verilerin Serbestleştirilmesi (Deserialization Vulnerability)", "description": "Uygulamanın, dış ağdan gelen ikili (binary) veya yapılandırılmış nesne akışlarını, veri doğruluğunu ve tip kısıtlamalarını kontrol etmeden canlı uygulama nesnelerine dönüştürmesidir.", "impact": "Nesne enjeksiyonu saldırıları, bellek durumu manipülasyonları ve kritik RCE (Uzaktan Kod Çalıştırma) zincirleri.", "mitigation": "Yerel nesne serbestleştirme modelleri yerine JSON veya Protocol Buffers gibi düz, sadece veri barındıran primitif şemalar tercih edilmelidir." }, "CWE-122": { "name": "Öbek Tabanlı Arabellek Taşması (Heap-based Buffer Overflow)", "description": "Belleğin dinamik olarak yönetilen 'Heap' bölgesindeki veri yapılarına ayrılan alanın ötesinde veri yazılarak bellek yöneticisi yapılarının bozulması hatasıdır.", "impact": "Sistem işaretçilerinin saptırılması, kararsız bellek sızıntıları ve dolaylı yoldan kod yürütme istismarları.", "mitigation": "Gelişmiş güvenlik mimarisine sahip modern bellek ayırıcılar (Hardened Allocators) kullanılmalı ve döngü sınırları sıkı denetlenmelidir." }, "CWE-863": { "name": "Hatalı Yetkilendirme Çözümlemesi (Incorrect Authorization)", "description": "Yetkilendirme modülünün mantıksal olarak çalışması fakat zayıf doğrulama anahtarları veya roller nedeniyle yanlış aktörlere yüksek yetkiler ataması hatasıdır.", "impact": "Kiracı veri izolasyonlarının delinmesi, dikey yetki aşımı ve kullanıcı profillerinin manipüle edilmesi.", "mitigation": "Endüstri standardı IAM kütüphaneleri entegre edilmeli, yetki kontrolleri doğrudan değiştirilemez veritabanı kayıt sahiplikleri ile ilişkilendirilmelidir." }, "CWE-98": { "name": "Dosya Adı Denetiminin Yapılmaması (Local/Remote File Inclusion)", "description": "Sunucu tarafındaki script dosyası dahil etme işlemlerinde (`include`, `require`), kullanıcıdan alınan yol değişkenlerinin filtre edilmeden çalıştırılması hatasıdır.", "impact": "Sunucuya dış ağdaki zararlı kod dosyalarının dahil edilmesi (RCE) veya sunucu içindeki gizli dosyaların okunması.", "mitigation": "Sunucu ayarlarından harici URL'lerin dahil edilmesi kapatılmalı (`allow_url_include = Off`) ve statik dosya beyaz listesi uygulanmalıdır." }, "CWE-400": { "name": "Uncontrolled Resource Consumption", "description": "Uygulamanın, harici bir istek tetiklemesiyle harcayacağı bellek boyutunu, dosya kanalı açılışını veya CPU döngü sınırlarını kısıtlamaması durumudur.", "impact": "Sunucu kaynaklarının tamamen tükenmesi, kilitlenmeler ve uygulamanın tamamen hizmet dışı kalması (Denial of Service).", "mitigation": "İstek oranları sınırlandırılmalı (Rate Limiting), işlem zaman aşımı sayaçları uygulanmalı ve konteyner bellek tavan sınırları kilitlenmelidir." }, "CWE-120": { "name": "Boyut Kontrolü Yapılmadan Arabellek Kopyalama (Classic Buffer Overflow)", "description": "Yazılım bileşeninin, bir veri kaynağını hedef tampon belleğe kopyalarken hedef alanın bu veriyi alabilecek kapasitede olup olmadığını hiç denetlememesi hatasıdır.", "impact": "Bellek kararsızlığı, komşu fonksiyon verilerinin bozulması ve potansiyel kod enjeksiyonu istismarları.", "mitigation": "Boyut denetimsiz tüm bellek operasyonları durdurulmalı; her kopyalama öncesi hedef ve kaynak uzunlukları assert edilmelidir." }, "CWE-639": { "name": "Kullanıcı Kontrolündeki Anahtar ile Yetki Atlama (IDOR)", "description": "Uygulamanın, istek parametrelerindeki birincil veritabanı anahtarlarını veya hesap ID'lerini değiştiren kullanıcının, o verinin gerçek sahibi olup olmadığını sunucuda kontrol etmemesidir.", "impact": "Güvenlik mekanizmasının tamamen baypas edilmesi, diğer tüm müşterilerin/kullanıcıların özel verilerine toplu erişim sağlanması.", "mitigation": "Sunucu tarafında, oturum açmış kullanıcı token'ı ile erişilmek istenen nesne kimliği arasında katı bir sahiplik doğrulaması (linkage assertion) yapılmalıdır." }, "CWE-287": { "name": "Hatalı Kimlik Doğrulama (Improper Authentication)", "description": "Uygulamanın kimlik doğrulama modülünde barındırdığı tasarım hataları nedeniyle, zayıf kimlik bilgilerini kabul etmesi veya doğrulama adımlarının belirli girdilerle atlanabilmesidir.", "impact": "Hesapların kolayca ele geçirilmesi, sahte oturum token'ları üretilmesi ve kimlik kontrol katmanlarının devre dışı kalması.", "mitigation": "Çok faktörlü kimlik doğrulama (MFA) standartları uygulanmalı, oturum token'ları güçlü kriptografik imzalara (JWT) sahip olmalıdır." }, "CWE-306": { "name": "Kritik Fonksiyon İçin Eksik Kimlik Doğrulama", "description": "Para transferi, şifre sıfırlama veya yönetici paneli gibi yüksek öncelikli iş mantığı hatlarının, kullanıcının kimliğini yeniden doğrulamadan doğrudan erişime açılmasıdır.", "impact": "Yetkisiz yönetimsel işlemler yürütülmesi, sistem veritabanlarının sıfırlanması ve altyapı kontrollerinin kaybedilmesi.", "mitigation": "Sifir Güven (Zero Trust) operasyonel modeli benimsenmeli, tüm kritik API hatları sıkı bir kimlik doğrulama geçidinden yönlendirilmelidir." }, "CWE-Other": { "name": "Diğer Yapısal Zafiyet Kategorileri", "description": "İşlenen metnin, modelin ana sınıflandırma başlığında yer alan yüksek frekanslı ilk 30 CWE sınıfının dışındaki nadir siber güvenlik paternleri ile eşleşmesi durumudur.", "impact": "İlgili spesifik zafiyet türüne bağlı olarak değişken bütünlük ve erişilebilirlik kayıpları tetiklenebilir.", "mitigation": "Uçtan uca kaynak kod denetimi yapılmalı, hata yığın sınırları incelenmeli ve dinamik güvenlik test araçları (DAST) kullanılmalıdır." } } # ========================================== # 🔍 MODEL KONUM ALGORİTMASI # ========================================== def find_model_folder(): current_dir = os.path.dirname(os.path.abspath(__file__)) parent_dir = os.path.dirname(current_dir) possible_paths = [ os.path.join(parent_dir, "securebert_multitask_model"), os.path.join(current_dir, "securebert_multitask_model"), "/app/securebert_multitask_model" ] for path in possible_paths: if os.path.exists(path) and "model_weights.pth" in os.listdir(path): return path return None MODEL_FOLDER = find_model_folder() # ========================================== # ⚙️ MULTI-TASK MODEL MİMARİSİ # ========================================== class AdvancedSecureBERT(nn.Module): def __init__(self, n_classes): super(AdvancedSecureBERT, self).__init__() self.bert = AutoModel.from_pretrained(MODEL_NAME) hidden_size = self.bert.config.hidden_size self.shared_layer = nn.Sequential( nn.Linear(hidden_size, hidden_size // 2), nn.GELU(), nn.Dropout(p=0.3) ) self.regressor = nn.Sequential( nn.Linear(hidden_size // 2, 64), nn.GELU(), nn.Linear(64, 1) ) self.classifier = nn.Sequential( nn.Linear(hidden_size // 2, 128), nn.GELU(), nn.Dropout(p=0.2), nn.Linear(128, n_classes) ) def forward(self, input_ids, attention_mask): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) cls_output = outputs.last_hidden_state[:, 0, :] shared_out = self.shared_layer(cls_output) score = self.regressor(shared_out) category = self.classifier(shared_out) return score, category @st.cache_resource def load_cyber_model(folder_path): tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) with open(os.path.join(folder_path, "label_encoder.pkl"), "rb") as f: le = pickle.load(f) model = AdvancedSecureBERT(n_classes=len(le.classes_)) weights_path = os.path.join(folder_path, "model_weights.pth") model.load_state_dict(torch.load(weights_path, map_location=torch.device('cpu'))) model.eval() return model, tokenizer, le if MODEL_FOLDER is not None: try: model, tokenizer, le = load_cyber_model(MODEL_FOLDER) except Exception as e: st.error(f"Başlatma Hatası: {e}") st.stop() else: st.error("Model yüklenemedi.") st.stop() # ========================================== # 🎨 PREMIUM ANALİTİK PANEL PANELİ (CENTERED) # ========================================== st.markdown('