La programmazione sicura è un sottoinsieme della programmazione corretta - ogni vulnerabilità sfruttabile è, in pratica, un bug tale che le conseguenze dell'esercitazione dell'errore sono vantaggiose per un individuo malintenzionato (l '"attaccante") ).
Le lingue offrono servizi che aiutano o non aiutano a programmare correttamente. Ad esempio, se l'attività a portata di mano comporta operazioni con stringhe di caratteri, le lingue che hanno un tipo intrinseco per le stringhe di caratteri, gestite come valori immutabili, rendono le cose molto più semplici per lo sviluppatore. Molti linguaggi moderni come C #, Python, PHP o anche Javascript rientrano in quella categoria. Viceversa, più linguaggi di basso livello come C e Assembly richiedono allo sviluppatore di gestire l'allocazione per i buffer che contengono stringhe, curando tutte le lunghezze e la deallocazione al momento opportuno. In questo senso, C e Assembly sono lingue "meno sicure" della maggior parte degli altri quando si tratta di gestire le stringhe di caratteri, poiché richiedono più assistenza dallo sviluppatore. "Cura" è una risorsa scarsa.
Allo stesso modo, alcune lingue includono un sacco di "magia" come la trascrizione automatica, il che significa che un'espressione apparentemente semplice può nascondere un sacco di complessità, che potrebbe mordere lo sviluppatore incauto. Alcuni linguaggi moderni come C #, Python, PHP o Javascript hanno quel difetto. Viceversa, linguaggi di basso livello come C e Assembly tendono ad essere "più sicuri" in quanto tutto ciò che fanno è esplicito. Lo sviluppatore deve solo leggere ciò che gli sta di fronte, con meno inferenze mentali su ciò che farà l'interprete / il compilatore. "Il tempo di pensare" è una risorsa scarsa.
Non esiste un paradigma che sia intrinsecamente meno sicuro di qualsiasi altro; tuttavia, la mancanza di un paradigma definito è sicuramente meno sicura. La programmazione sicura, in definitiva, riguarda uno sviluppatore che sa cosa sta facendo, e questo deriva da discipline .
Modifica: "Disciplina" significa mai scrivere un codice il cui comportamento completo, in tutte le possibili combinazioni di dati di input normali e anormali, non è completamente compreso dallo sviluppatore. In particolare, non implica il lancio di codice insieme e la messa a punto finché la cosa non accetta di funzionare. Allo stesso modo, copiare e incollare da Stack Overflow è una questione di scarsa disciplina - la lettura su SO è molto buona, ma deve essere seguita da comprensione approfondita di ciò che fa il codice.