Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| import torch | |
| # Sayfa ayarları | |
| st.set_page_config( | |
| page_title="Code Security Analyzer", | |
| page_icon="🔒", | |
| layout="wide" | |
| ) | |
| # Başlık | |
| st.title("🔒 Code Security Analyzer") | |
| st.markdown("CodeBERT tabanlı kod güvenlik analizi aracı") | |
| st.markdown("---") | |
| # Model yükleme durumu | |
| def load_model(): | |
| MODEL_NAME = "mahdin70/codebert-devign-code-vulnerability-detector" | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) | |
| model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME) | |
| model.eval() | |
| return tokenizer, model | |
| with st.spinner("Model yükleniyor..."): | |
| tokenizer, model = load_model() | |
| st.success("Model hazır!") | |
| # Kod girişi | |
| code_input = st.text_area( | |
| "Kodu yapıştırın", | |
| height=200, | |
| placeholder="def login(username, password):\n query = f\"SELECT * FROM users WHERE user='{username}'\"\n return db.execute(query)" | |
| ) | |
| # Analiz butonu | |
| if st.button("🔍 Analiz Et", type="primary"): | |
| if not code_input or not code_input.strip(): | |
| st.warning("Lütfen analiz edilecek kod girin") | |
| else: | |
| with st.spinner("Analiz ediliyor..."): | |
| # Tokenize | |
| inputs = tokenizer( | |
| code_input, | |
| return_tensors="pt", | |
| truncation=True, | |
| max_length=512, | |
| padding=True | |
| ) | |
| # Tahmin | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| probabilities = torch.softmax(outputs.logits, dim=-1) | |
| prediction = torch.argmax(probabilities, dim=-1).item() | |
| confidence = probabilities[0][prediction].item() | |
| # Sonuçları göster | |
| st.markdown("---") | |
| st.subheader("Sonuç") | |
| if prediction == 1: | |
| st.error("🔴 ZAFİYET TESPİT EDİLDİ") | |
| st.markdown("Bu kodda güvenlik zafiyeti olabilir.") | |
| else: | |
| st.success("🟢 GÜVENLİ GÖRÜNÜYOR") | |
| st.markdown("Bu kod güvenli görünüyor.") | |
| st.progress(confidence) | |
| st.markdown(f"**Güven Skoru:** {confidence:.2%}") | |
| # Örnekler | |
| st.markdown("---") | |
| st.subheader("Örnek Kodlar") | |
| examples = { | |
| "SQL Injection (Zafiyet)": "def login(user, pwd):\n query = f\"SELECT * FROM users WHERE name='{user}'\"\n return db.execute(query)", | |
| "SQL Injection (Güvenli)": "def login(user, pwd):\n query = \"SELECT * FROM users WHERE name=%s\"\n return db.execute(query, (user,))", | |
| "XSS (Zafiyet)": "def render(comment):\n return f'<div>{comment}</div>'", | |
| "XSS (Güvenli)": "def render(comment):\n import html\n return f'<div>{html.escape(comment)}</div>'" | |
| } | |
| selected_example = st.selectbox("Örnek seçin:", list(examples.keys())) | |
| if st.button("Örneği Kullan"): | |
| st.session_state.code_input = examples[selected_example] | |
| st.rerun() | |
| # Not | |
| st.markdown("---") | |
| st.info("💡 **Not:** Bu otomatik bir analizdir ve %100 doğru olmayabilir. Önemli kodlar için manuel review yapın.") | |