„Secure by design“ – tai kompiuterių taikomųjų programų ar sistemų kūrimo metodika, kai visi programinės įrangos aspektai iš prigimties yra sukurti taip, kad kenkėjiškam vartotojui būtų sunku arba neįmanoma sugadinti, užpulti ar pažeisti sistemą. Daugeliu atvejų saugi programinė įranga planuojama nuo pat sukūrimo, kad užtaisytų net mažiausias elementų funkcijų saugumo skyles, o kodavimo fazėje būtų naudojamos patikimos, klasikinės technologijos, siekiant užtikrinti, kad galutiniame gaminyje nebūtų jokių trūkumų. Kai kurios pagrindinės sritys, į kurias daugiausia dėmesio skiriama saugios projektavimo inžinerijai, yra vartotojo arba kliento įvestis, saugūs ryšiai ir pagrindinis patvirtinimas, siekiant užtikrinti, kad tam tikrų tipų atakos taptų neįmanomos. Nors jokia kompiuterio programa nėra apsaugota nuo visų kenkėjiškų atakų, sukurta saugi sistema turi aiškų pranašumą prieš sistemas, kurios naudoja išorines saugos bibliotekas arba remiasi supančios aplinkos, pvz., operacinės sistemos, saugumu, nes programinė įranga sukurta siekiant užkirsti kelią išnaudojamoms atakoms ir jas sulaikyti.
Viena iš labiausiai pažeidžiamų bet kurios kompiuterio programos sričių dėl nenuspėjamo pobūdžio yra vartotojo įvestis. Įvestis, kuri nėra patvirtinta, naudojama nepatikrinus klaidų arba aklai priimta iš bet kurio šaltinio, gali panaudoti vidinį sistemos veikimą prieš save, kad atskleistų neskelbtinus duomenis arba sukeltų sistemos gedimą. Kai programa yra saugi pagal dizainą, naudotojo įvestis paprastai yra tam tikru būdu patvirtinama, patikrinama, ar nėra kenkėjiškų sekų, arba netgi konvertuojama į saugų formatą, kad būtų galima apdoroti nesijaudinant dėl nenuspėjamos elgsenos, kuri gali atsirasti dėl numatytojo kai kurių simbolių derinių apdorojimo.
Vartotojo įvesties problema tampa sudėtingesnė saugioje pagal projektavimo sistemoje, kai programinė įranga yra serveris, priimantis įvestis iš kliento tinkle. Kai kurie užpuolikai gali perimti galiojančius pranešimus iš kliento į serverį arba visiškai suklastoti klientą, todėl dažniausiai naudojami kiti metodai, nei patentuotas šifravimas, nes pranešimus perimantis užpuolikas gali lengvai sulaužyti šifravimą. Veiksmingesni saugos metodai kuriant programą apima kliento siunčiamos informacijos apribojimą ir serverio ar modulio galimybių ribojimą, ką jis gali arba ko negali padaryti pats.
Sujungus programinės įrangos moduliškumą su mažiausių privilegijų principu, saugi sistema gali užkirsti kelią užpuolikams visiškai sukompromituoti sistemą, perduodant užduotis tarp modulių, kurie nebūtinai turi galimybę atlikti vieną destruktyvų veiksmą. Tokiu būdu galima įdiegti apsaugos priemones ir saugiklius, leidžiančius sistemai saugiai atsigauti po įsibrovimo. Šią koncepciją sunku įtraukti į programą, kuri nenaudoja saugių principų, nes reikia, kad visa programos architektūra būtų pritaikyta saugos tikslui.