File size: 3,212 Bytes
41f9eeb
9459863
 
 
41f9eeb
 
 
 
 
 
9459863
41f9eeb
 
 
 
9459863
41f9eeb
 
 
 
 
 
 
 
 
 
 
 
 
9459863
41f9eeb
 
 
 
 
9459863
 
41f9eeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
@st.cache_resource
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.")