- Go kodu yazarken güvenliği dikkate almak karmaşık bir iştir
- Sürekli uygulandığında sağlam, güvenli ve yüksek performanslı kod yazmaya yardımcı olabilecek birkaç somut pratik sunuluyor
Go sürümünü güncel tutmak
- Projede kullanılan Go sürümü güncel tutulmalıdır
- En yeni dil özellikleri kullanılmasa bile Go sürümünü yükseltmek, keşfedilmiş açıklar için tüm güvenlik yamalarını almayı sağlar
- Yeni Go sürümleri ayrıca en güncel bağımlılıklarla uyumluluğu da garanti eder
- Go release history sitesinden hangi Go sürümünde hangi güvenlik sorunlarının ve CVE'lerin giderildiğini kontrol edip projenin
go.mod dosyasında en yeni sürüme güncelleme yapabilirsiniz
- Go sürümünü yükselttikten sonra uyumluluk ve bağımlılık sorunları oluşmadığından emin olunmalıdır
- Kod kalitesini ve güvenliği değerlendirmek için statik kod analiz araçları kullanılabilir
vet
- Go'nun kendi sağladığı
go vet komutuyla Go kodu analiz edilebilir
go vet komutu argümansız çalıştırıldığında varsayılan olarak izin verilen tüm seçeneklerle çalışır
- Kaynak kodu tarar ve olası sorunları bildirir
- En yaygın sorunlar arasında goroutine hataları, kullanılmayan değişkenler ve ulaşılamayan kod bölgeleri bulunur
staticcheck
- Üçüncü taraf linter Staticcheck, hataları bulur, performans problemlerini tespit eder ve Go dilinin stilini de uygular
- Bulduğu sorunları açıklar ve örneklerle birlikte düzeltme önerileri sunar
- CI pipeline'ında çalıştırmanın yanı sıra bağımsız bir çalıştırılabilir dosya olarak kurulup yerelde kod taraması için de kullanılabilir
- Kurulu sürümü kontrol edin ve taramayı çalıştırmaya hazır olduğundan emin olun
- Argümansız çalıştırıldığında varsayılan olarak tüm kod analizörlerini çağırır
- NGINX Agent GitHub deposunda neler bulunabileceğine dair bir örneğe bakın
- Tarama sonuçları deprecated paketler/metotlar/fonksiyonlar, kullanılmayan değişkenler/alanlar ve kod kalitesiyle ilgili sorunlar olmak üzere 3 kategoriye ayrılabilir
golangci-lint
golangci-lint, go install komutuyla kurulabilir
- Kurulumun düzgün yapıldığını doğrulamak için sürümü kontrol edin
- Argümansız çağrıldığında tüm linter'lar çalıştırılır
- Daha önce klonlanan
agent deposunda hangi uyarıları ve önerileri gösterdiğini kontrol edin
- Linter tam dosyayı ve satırı işaret eder
- Kodu değerlendirin ve değiştirin, ardından linter'ı yeniden çalıştırın ve tüm birim testlerini çalıştırın
- Testler geçerse güncellenen kodu commit edin ve uzak depoya push edin
Race condition tespiti
- Birden fazla goroutine aynı anda bir kaynağa erişmeye çalıştığında race condition oluşabilir
- En az bir goroutine kaynağı değiştirmeye çalıştığında bu durum tespit edilir
- Go,
test aracıyla birlikte -race argümanını kullanarak bu durumları test etmeyi varsayılan olarak destekler
- Race detector yalnızca çalıştırılan kodu değerlendirir ve çalıştırılmayan kod yollarını yok sayar; bu yüzden önce ölü kod olmadığını doğrulamak için statik kod analiz araçları çalıştırılmalıdır
- Testleri paralel çalıştırmak, eşzamanlılık sorunlarını tespit etme olasılığını artırır
Açıklar için kaynak kod taraması
govulncheck
- Kod tabanını CVE'ler veritabanında listelenen bilinen açıklar için tarayan bir araçtır
- Go ekibi tarafından geliştirilir ve tarayıcıya Go açıklarına özel bir veritabanı bilgi sağlar
- En son sürümü kurduktan sonra temel işlevleri deneyin
- habit deposunu klonladıktan sonra araç kök dizinde çalıştırılır
- Herhangi bir açık bulunmaz
- İkili dosya tarandığında farklı açıklar bulunabilir
- Go sürümünü en yeni sürüme yükseltin, bağımlılıkları çekin ve ardından yazılımda ve bağımlılıklarda CVE bulunmadığını doğrulayın
gosec
- Güvensiz kod yapılandırmalarını bulmaya yardımcı olan bir statik kod analiz aracıdır
- Yerel sistemde veya GitHub Action ile CI pipeline'ında çalıştırılabilir
- Tarama yapılandırması için çeşitli seçenekler ve kural listeleri vardır
- Taranacak Go kodunu içeren GitHub deposu klonlandıktan sonra kök dizinde tarama başlatılır
- Tarama raporunda ciddiyet ve güven düzeyine göre sıralanmış potansiyel sorunların listesi görülebilir
- Raporlanan CWE'leri inceleyin ve listelenen zafiyetler hakkında daha ayrıntılı bilgi edinin
Fuzzing
- Kod kalitesini doğrulamanın ve açıkları bulmanın son yöntemidir
- Kod test kapsamını kullanarak rastgele üretilen giriş verilerini işleyen otomatikleştirilmiş özel testlerdir
- Buffer overflow, SQL injection, DoS saldırıları ve XSS saldırıları gibi potansiyel güvenlik kusurlarını bulmada çok faydalıdır
- Çok sayıda giriş kombinasyonu otomatik olarak üretildiği için geliştiricilerin yüzlerce, binlerce veri kombinasyonunu tek tek düşünmesi gerekmez
1 yorum
Hacker News görüşü
go vetvego test -racehakkında faydalı ipuçları içeriyorgosechakkında yeni bilgi edinildi