omernet/code-security-analyzer
0
1import streamlit as st2from transformers import AutoTokenizer, AutoModelForSequenceClassification3import torch4 5# Sayfa ayarları6st.set_page_config(7 page_title="Code Security Analyzer",8 page_icon="🔒",9 layout="wide"10)11 12# Başlık13st.title("🔒 Code Security Analyzer")14st.markdown("CodeBERT tabanlı kod güvenlik analizi aracı")15st.markdown("---")16 17# Model yükleme durumu18@st.cache_resource19def load_model():20 MODEL_NAME = "mahdin70/codebert-devign-code-vulnerability-detector"21 tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)22 model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)23 model.eval()24 return tokenizer, model25 26with st.spinner("Model yükleniyor..."):27 tokenizer, model = load_model()28 29st.success("Model hazır!")30 31# Kod girişi32code_input = st.text_area(33 "Kodu yapıştırın",34 height=200,35 placeholder="def login(username, password):\n query = f\"SELECT * FROM users WHERE user='{username}'\"\n return db.execute(query)"36)37 38# Analiz butonu39if st.button("🔍 Analiz Et", type="primary"):40 if not code_input or not code_input.strip():41 st.warning("Lütfen analiz edilecek kod girin")42 else:43 with st.spinner("Analiz ediliyor..."):44 # Tokenize45 inputs = tokenizer(46 code_input,47 return_tensors="pt",48 truncation=True,49 max_length=512,50 padding=True51 )52 53 # Tahmin54 with torch.no_grad():55 outputs = model(**inputs)56 probabilities = torch.softmax(outputs.logits, dim=-1)57 prediction = torch.argmax(probabilities, dim=-1).item()58 confidence = probabilities[0][prediction].item()59 60 # Sonuçları göster61 st.markdown("---")62 st.subheader("Sonuç")63 64 if prediction == 1:65 st.error("🔴 ZAFİYET TESPİT EDİLDİ")66 st.markdown("Bu kodda güvenlik zafiyeti olabilir.")67 else:68 st.success("🟢 GÜVENLİ GÖRÜNÜYOR")69 st.markdown("Bu kod güvenli görünüyor.")70 71 st.progress(confidence)72 st.markdown(f"**Güven Skoru:** {confidence:.2%}")73 74# Örnekler75st.markdown("---")76st.subheader("Örnek Kodlar")77 78examples = {79 "SQL Injection (Zafiyet)": "def login(user, pwd):\n query = f\"SELECT * FROM users WHERE name='{user}'\"\n return db.execute(query)",80 "SQL Injection (Güvenli)": "def login(user, pwd):\n query = \"SELECT * FROM users WHERE name=%s\"\n return db.execute(query, (user,))",81 "XSS (Zafiyet)": "def render(comment):\n return f'<div>{comment}</div>'",82 "XSS (Güvenli)": "def render(comment):\n import html\n return f'<div>{html.escape(comment)}</div>'"83}84 85selected_example = st.selectbox("Örnek seçin:", list(examples.keys()))86if st.button("Örneği Kullan"):87 st.session_state.code_input = examples[selected_example]88 st.rerun()89 90# Not91st.markdown("---")92st.info("💡 **Not:** Bu otomatik bir analizdir ve %100 doğru olmayabilir. Önemli kodlar için manuel review yapın.")93 