„Bezpieczne z założenia” to metodologia tworzenia aplikacji lub systemów komputerowych, w której wszystkie aspekty oprogramowania są z natury opracowane w sposób utrudniający lub uniemożliwiający złośliwemu użytkownikowi uszkodzenie, zaatakowanie lub złamanie zabezpieczeń systemu. W wielu przypadkach oprogramowanie, które jest bezpieczne z założenia, jest planowane od samego początku, aby zamknąć nawet najmniejsze luki w zabezpieczeniach podstawowych funkcji i korzystać z zaufanych, klasycznych technik podczas fazy kodowania, aby zapewnić, że w gotowym produkcie nie zostaną wprowadzone żadne wady. Niektóre z głównych obszarów, na których koncentruje się inżynieria bezpieczeństwa na etapie projektowania, to dane wejściowe użytkownika lub klienta, bezpieczna komunikacja i podstawowa walidacja w celu zapewnienia, że niektóre rodzaje ataków są niemożliwe. Chociaż żadna aplikacja komputerowa nie jest odporna na wszystkie złośliwe ataki, system zaprojektowany zgodnie z projektem ma wyraźną przewagę nad systemami, które korzystają z zewnętrznych bibliotek zabezpieczeń lub polegają na bezpieczeństwie otaczającego środowiska, takiego jak system operacyjny, ponieważ konstrukcja oprogramowanie ma na celu zapobieganie i ograniczanie ataków wykorzystujących eksploatację.
Jednym z najbardziej wrażliwych obszarów każdej aplikacji komputerowej, ze względu na jej nieprzewidywalny charakter, jest wprowadzanie danych przez użytkownika. Dane wejściowe, które nie są zweryfikowane, są używane bez sprawdzania błędów lub są akceptowane na ślepo z dowolnego źródła, mogą wykorzystywać wewnętrzne działanie systemu przeciwko sobie w celu ujawnienia poufnych danych lub spowodowania awarii systemu. Gdy aplikacja jest bezpieczna z założenia, dane wprowadzane przez użytkownika są zwykle w jakiś sposób sprawdzane, sprawdzane pod kątem złośliwych sekwencji lub nawet konwertowane do bezpiecznego formatu, dzięki czemu można je przetwarzać bez martwienia się o nieprzewidywalne zachowanie, które może wynikać z domyślnego przetwarzania niektórych kombinacji znaków.
Kwestia wprowadzania danych przez użytkownika staje się bardziej złożona w systemie z zabezpieczeniem w fazie projektowania, gdy oprogramowanie jest serwerem przyjmującym dane wejściowe od klienta przez sieć. Niektórzy atakujący mogą przechwycić prawidłowe wiadomości od klienta do serwera lub całkowicie sfałszować klienta, więc zwykle stosuje się metody inne niż szyfrowanie zastrzeżone, ponieważ atakujący przechwytujący wiadomości może łatwo złamać szyfrowanie. Bardziej efektywne metody bezpieczeństwa w ramach projektu programu obejmują ograniczanie informacji wysyłanych przez klienta i ograniczanie możliwości serwera lub modułu w zakresie tego, co może lub nie może zrobić samodzielnie.
Łącząc modułowość oprogramowania z zasadą najmniejszych uprawnień, system, który jest z założenia bezpieczny, może zapobiec całkowitemu naruszeniu systemu przez atakujących poprzez delegowanie zadań między modułami, które niekoniecznie mają możliwość samodzielnego wykonania jednej destrukcyjnej akcji. W ten sposób można wprowadzić zabezpieczenia i sejfy na wypadek awarii, które umożliwiają bezpieczne odzyskanie systemu po włamaniu. Ta koncepcja jest trudna do włączenia do aplikacji, która nie korzysta z zasad, które są bezpieczne z założenia, ponieważ wymaga, aby cała architektura programu była ukierunkowana na cel bezpieczeństwa.