Kod ve web siteleri için güvenlik taraması
RepoVerse bir GitHub reposunun kodunu ve bağımlılıklarını ya da canlı bir web sitesinin header'larını, cookie'lerini ve script'lerini inceler ve her bulgunun arkasındaki kanıtı gösterir. Bu rehberler, aradığı her zafiyet sınıfını zafiyetli bir örneğin yanında çözümüyle anlatır.
Tarayıcılar
- Kod, secret ve bağımlılıklar için GitHub güvenlik taramasıGitHub reposunu injection açıkları, sızmış secret'lar ve zafiyetli bağımlılıklar için tara. İstekten tehlikeli çağrıya veri akışı izi ve çözüm önerileri.
- Kanıtını gösteren web sitesi güvenlik taramasıPasif web sitesi güvenlik taraması: HTTPS ve HSTS, CSP, cookie'ler, karışık içerik, açıkta kalan anahtarlar ve eski JavaScript kütüphaneleri — kanıtıyla birlikte.
- Her eksik için çözümüyle güvenlik header kontrolüSitenin HTTP güvenlik header'larını kontrol et — Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy — her eksik için eklenecek satırla.
- Lockfile'ını okuyan bağımlılık zafiyet taramasınpm, yarn, pnpm, PyPI, Cargo, Composer ve RubyGems lockfile'larını OSV zafiyet veritabanına karşı kontrol et. Kurulu kesin sürümler, dolaylı yollar ve düzeltilmiş sürümler.
- Canlı bir sitede zafiyetli JavaScript kütüphanelerini bulHerhangi bir sitede eski ve zafiyetli JavaScript kütüphanelerini bul: jQuery, lodash, Bootstrap, moment, Next.js — küçültülmüş Vite ve webpack paketlerinde bile.
Koddaki zafiyetler
- SQL injection: nedir ve nasıl düzeltilirSQL injection (CWE-89) nedir, zafiyetli bir sorgunun yanında düzeltilmiş hali ve kodundaki string ile kurulan SQL'i veri akışı analiziyle nasıl bulursun.
- Komut injection: bir parametre shell komutu çalıştırdığındaKomut injection (CWE-78) bir istek parametresini nasıl ikinci bir shell komutuna çevirir, güvenli execFile kalıbı ve girdiyle beslenen exec çağrılarını bulma.
- Kod injection: eval'e verilen istek girdisiİstek verisi üzerinde eval, new Function ve string timer'ların neden uzaktan kod çalıştırma (CWE-95) anlamına geldiği, OWASP NodeGoat'tan gerçek bir örnek ve çözüm.
- NoSQL injection: MongoDB sorgularını istekten yeniden yazmakMongoDB $where ifadeleri ve {"$ne": null} gibi operatörler istek verisinin sorguyu yeniden yazmasına nasıl izin verir (CWE-943); örnekler ve çözüm.
- Siteler arası betik (XSS): nasıl çalışır, nasıl durdurulurYansıtılan, kalıcı ve DOM tabanlı XSS (CWE-79), zafiyetli ve düzeltilmiş kodla; ayrıca hasarı sınırlayan şablon, CSP ve cookie ayarları.
- SSRF: sunucunun nereye bağlanacağına istek karar verdiğindeSSRF (CWE-918) isteğin sunucunun nereye bağlanacağını seçmesine nasıl izin verir — iç servisler, bulut metadata'sı — ve URL'ler nasıl güvenle kurulur.
- Path traversal: hedef klasörün dışındaki dosyaları okumakDosya adındaki ../ dizilerinin hedef klasörden nasıl kaçtığı (CWE-22), yapılandırma dosyaları ve anahtarların nasıl okunduğu ve bunu durduran çözümle-ve-kontrol-et kalıbı.
- Açık yönlendirme: alan adın bir phishing linki olarakDoğrulanmamış bir yönlendirme parametresi (CWE-601) alan adını nasıl bir phishing linkine çevirir ve yalnızca yerel yollara nasıl izin verilir.
- ReDoS: tek bir düzenli ifade sunucuyu nasıl kilitler([0-9]+)+ gibi iç içe niceleyiciler neden üstel geri izleme yapar (CWE-1333), birkaç düzine karakter Node.js sunucusunu nasıl kilitler ve çözümü.
- IDOR: başkasının verisini görmek için tek bir sayıyı değiştirmekURL'deki ID'yi değiştirmek başka kullanıcıların verisini nasıl açar (IDOR, BOLA, CWE-639); giriş kontrolü neden sahiplik kontrolü değildir, çözümü.
- CSRF: kullanıcılarının hiç göndermek istemediği isteklerCSRF (CWE-352) giriş yapmış bir ziyaretçinin tarayıcısına sitene nasıl form gönderttirir; CSRF token'ları ve SameSite cookie'leri bunu nasıl durdurur.
- Koda gömülü secret'lar: kodda, commit'lerde ve paketlerde API anahtarlarıRepoya eklenmiş veya sitenin JavaScript'inde açıkta kalan API anahtarlarını ve token'ları bul (CWE-798); dosyayı silmek neden yetmez, nasıl yenilenir.
- Zafiyetli bağımlılıklar: senin yazmadığın kodUygulama kodunun çoğu üçüncü taraftır. Zafiyetli bağımlılıkların projeye nasıl girdiği (CWE-1395), neden önemli olanın lockfile olduğu ve düzelten yükseltmeyi nasıl seçersin.
- Güvensiz deserialization: kod olarak çalışan veriGüvenilmeyen veriyi pickle, yaml.load, Java serialization veya node-serialize ile çözmenin neden saldırgan kodu çalıştırdığı (CWE-502) ve JSON artı doğrulama alternatifi.
- Parola saklama: bcrypt, scrypt veya Argon2 ile hash'leParolaların neden asla düz metin veya MD5/SHA-1 ile saklanmaması gerektiği (CWE-256, CWE-916) ve bcrypt, scrypt veya Argon2 ile nasıl doğru hash'lenip doğrulandığı.
- Log injection: kendi loglarında sahte kayıt üretmekİstek verisindeki satır sonları nasıl sahte log kaydı üretir ve saldırıları gizler (CWE-117); yapılandırılmış log ve CR/LF temizleme ile önleme.
Web sitesi ve taşıma güvenliği
- Güvenli oturum cookie'leri: bayraklar ve giriş adımıOturum cookie'lerini güvenle ayarla: Secure, HttpOnly ve SameSite bayrakları (CWE-614, CWE-1004), session fixation'a karşı girişte oturumu yenileme, Express örnekleriyle.
- Content Security Policy: gerçekten koruyan bir politika yazmakXSS'i gerçekten durduran bir Content-Security-Policy yaz: unsafe-inline ve unsafe-eval neden zayıflatır, nonce ve strict-dynamic, başlangıç politikası.
- HTTPS ve HSTS: düz HTTP açığını kapatmakHer site neden HTTPS'e, HTTP'den 301 yönlendirmesine ve Strict-Transport-Security header'ına (CWE-319) ihtiyaç duyar; doğru max-age ve karışık içerik.
- Clickjacking: görünmez bir frame üzerinden çalınan tıklamalarClickjacking'in (CWE-1021) tıklamaları çalmak için sayfanı görünmez bir frame'de nasıl sakladığı ve bunu önleyen iki header — CSP frame-ancestors ve X-Frame-Options.