Zaradi povečane uporabe tehnologije v sistemih, ki obravnavajo občutljive podatke, učinkovitost in hitrost nista več edina pogoja, ko pride do izdelave programske opreme. Vse večjo pozornost je treba posvečati varnosti in zanesljivosti. Pri predmetu bomo študente seznanili s sodobnimi tehnikami zlorabe programske opreme, kot tudi z varnostnimi mehanizmi vgrajenimi v programsko opremo, z namenom preprečevanja ter zajezitve dosega zlorabe. Vsebine predmeta obsegajo naslednje tematike: • Uporabniški vnosi in problematika (sanitizacija, napadi s kompresijo) Vrivanje zlonamerne kode v komunikacijo z zalednim delom (SQL, komentarji, timing napadi, eksfiltracija podatkov, pisanje datotek) • Prelivanje skozi tipe (velika števila, nepredstavljiva števila, velikost nizov) • Napadi skozi XML/HTML (escaping, stored/cross-site scripting, server-side request forgery) • Vrivanje preko formatov (executable regex in format string, format mismatching) • Dnevniški zapisi (uporabnost, vrivanje, monitoring, vrivanje ukazov) • Zloraba kriptografskih standardov (HMAC, podpisovanje, kodiranje CBC/ECB/GCM, podpisovanje za dokazovanje obstoja) • Avtentikacijski algoritmi (JWT, openID, Auth0) • Deserializacija objektov (nevarnosti, JSON dump, user state) • Problematika odvisnih knjižnic (omejevanje na različico knjižnice, supply chain napadi) • Race condition (skozi niti/procese) • Defenzivno programiranje (Preverjanje napak, pričakovanje izjem, preverjanje nedefiniranih rezultatov funkcij, sanitizacija vhodnih podatkov, povratek v stabilno stanje) • Orodja za razhroščevanje, ponovljivost prevedene kode, CI/CD • Penetracijski testi • statična analiza kode, fuzzer, orodja za avtomatično preverjanje kvalitete kode.