Statik Analiz
- İngilizcesi
- Static Analysis
- Okunuşu
- stetik ınelısis
Kısaca
Statik analiz, hataları, güvenlik açıklarını ve kalite sorunlarını erken bulmak için kaynak kodun çalıştırılmadan otomatik olarak incelenmesidir.
Statik analiz nedir?
Statik analiz, hataları, güvenlik açıklarını ve kod kalitesi sorunlarını bulmak için bir programın kaynak kodunu ya da derlenmiş biçimini çalıştırmadan incelemek demektir. Statik, kodun hareketsiz hâlde incelendiği anlamına gelir. Karşıtı, testlerin, profiler'ların ve fuzzer'ların yaptığı gibi programı çalışırken gözlemleyen dinamik analizdir.
Bir statik analiz aracı, kodu yapısının ağaç biçimli bir temsili olan soyut sözdizimi ağacına (AST) ayrıştırır ve çoğu zaman kontrol ve verinin program boyunca nasıl aktığını gösteren grafikler oluşturur. Kontroller, sabit kodlanmış bir parolayı fark etmek gibi basit örüntü eşleştirmeden; tip denetimi, olası null erişimlerini tespit etme, kaynak sızıntılarını bulma ve bir HTTP isteğinden gelen değer gibi güvenilmeyen girdiyi izleyerek denetlenmeden bir SQL sorgusuna ulaşıp ulaşamadığını gören taint analizi gibi derin analizlere kadar uzanır. Hiçbir araç her programın her özelliğine kusursuzca karar veremeyeceğinden her biri yanlış pozitifler (gerçek olmayan sorunlar hakkındaki uyarılar) ile yanlış negatifler (kaçırdığı gerçek hatalar) arasında bir denge kurar.
Statik analiz, bir mühendisin binanın ayakta durup durmayacağını beklemek yerine inşaat başlamadan önce yapısal kusurlar için planları incelemesi gibidir. Editörlerde, pre-commit hook'larında, CI/CD hatlarında ve kod incelemesinde çalışır; böylece sorunlar yazıldıktan dakikalar sonra ortaya çıkar. Güvenlik odaklı statik analize genellikle static application security testing'in kısaltması olan SAST denir.
Statik analiz sıklıkla linting ile karıştırılır. Linting, çoğunlukla bir seferde tek bir dosyaya bakarak esas olarak stile ve yaygın hatalara odaklanan hafif bir statik analiz türüdür; daha derin statik analiz araçları ise ince hataları bulmak için veriyi fonksiyonlar ve dosyalar arasında izler. TypeScript derleyicisi gibi bir derleyicinin tip denetleyicisi de bir statik analiz biçimidir. Bunların hiçbiri testlerin yerini almaz: testler kodun belirli girdiler için gerçekte ne yaptığını kanıtlar; statik analiz ise olası tüm yolları akıl yürütür ama programın ne yapması gerektiğini bilemez.
Önemli noktalar
- Statik analiz, kodu çalıştırmadan inceler.
- Hataları, güvenlik açıklarını ve kalite sorunlarını erken bulur.
- Teknikler örüntü eşleştirmeden veri akışı ve taint analizine kadar uzanır.
- Her araç yanlış pozitifler ile kaçırılan hatalar arasında bir denge kurar.
- Linting ve tip denetimi, statik analizin yaygın biçimleridir.
Örnek
def find_user(conn, username):
# The tool traces "username" (untrusted input) into a SQL string:
# warning: possible SQL injection, tainted data reaches a query
query = f"SELECT * FROM users WHERE name = '{username}'"
return conn.execute(query).fetchall()
def order_total(items):
total = 0
for item in items:
total += item.price
return totl # error: undefined name 'totl'Sık sorulan sorular
Statik analiz ile dinamik analiz arasındaki fark nedir?
Statik analiz, kodu çalıştırmadan inceler; bu yüzden tüm yollar hakkında akıl yürütebilir ama yanlış alarmlar verebilir. Dinamik analiz ise programı testler ya da fuzzing sırasında olduğu gibi çalışırken gözlemler; bu yüzden gerçek davranışı görür, ancak yalnızca denediği girdiler için.
SAST nedir?
SAST, static application security testing ifadesinin kısaltmasıdır: enjeksiyon açıkları, güvensiz kriptografi ve sabit kodlanmış sırlar gibi güvenlik kusurlarına odaklanan statik analiz. Genellikle CI/CD hattında otomatik olarak çalıştırılır.
Linter bir statik analiz aracı mıdır?
Evet. Linter, yaygın hatalara ve stile odaklanan hafif bir statik analiz aracıdır; daha gelişmiş analizörler ise tüm bir kod tabanında veri ve kontrol akışını izler.
İlgili sayfalar
- LintingTest ve Kalite, s. 15Linting, kaynak kodu çalıştırmadan otomatik olarak analiz edip olası hataları, stil sorunlarını ve şüpheli kalıpları kod yayına çıkmadan işaretleme işlemidir.
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- SQL InjectionGüvenlik, s. 39SQL injection, kullanıcı girdisinin veritabanı sorgusunun parçası sayıldığı ve saldırganın erişmemesi gereken verileri okuyup değiştirebildiği saldırıdır.
- Code ReviewSürüm Kontrolü, s. 4Code review, kod değişikliklerinin birleştirilmeden önce başka geliştiricilerce incelenmesidir; hataları yakalar, kaliteyi artırır, bilgi paylaşımını sağlar.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- Fuzz TestiTest ve Kalite, s. 9Fuzz testi, çökmeleri, takılmaları ve güvenlik açıklarını bulmak için bir programa çok sayıda beklenmedik ya da bozuk girdi veren otomatik bir tekniktir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin