L'educazione alla sicurezza dovrebbe essere contestuale. Non c'è molto da dire sulla sicurezza quando si studiano gli alberi rosso-neri o si uniscono gli ordinamenti. Ma la sicurezza dovrebbe essere un fattore costante e pervasivo come parte di tutto ciò che fa lo studente.
Tutti gli elementi relativi alla sicurezza dovrebbero essere richiesti come ovvio; il controllo dei limiti e la disinfezione degli input, ad esempio, dovrebbero essere assolutamente necessari in tutti i compiti. Se l'esaminatore può interrompere l'applicazione dei compiti fornendo input non validi, i punti devono essere detratti. Se i limiti dell'array non sono controllati in modo corretto (presupponendo un linguaggio non sicuro come C), punta fuori. Non dovrebbe essere sufficiente che la cosa passi il caso di test assegnato, ma deve anche essere scritto abbastanza bene che in uno scenario reale non causerebbe un disastro.
Gli studenti devono essere abituati a sempre preoccuparsi di robustezza e sicurezza allo stesso modo in cui gli studenti di chimica sempre dovrebbero preoccuparsi della sicurezza del laboratorio. La sicurezza non è qualcosa che studi un semestre e poi vai avanti.
Se hai intenzione di tenere una singola lezione all'inizio sulla sicurezza, allora dovrebbe coprire principalmente le aspettative relative alla sicurezza che gli studenti dovranno affrontare. Queste aspettative dovrebbero essere aspettative del mondo reale rispetto alle pratiche di codifica e dovrebbero riflettere il tipo di vigilanza che è sempre nella parte posteriore della mente per un buon programmatore.
Questo si divide in diverse aree principali, non tutte appropriate per ogni lingua e ogni ambiente di programmazione, eccone alcune che vengono in mente:
-
Sicurezza della lingua : un affare estremamente grande con C / C ++, non tanto con la maggior parte di tutto il resto. Puntatori, buffer e quel genere di cose rientrano in questa categoria.
-
Disinfezione degli input : enorme. Assolutamente enorme Non riesco a pensare a una singola area in cui questo non è applicabile.
-
Chiarezza del codice e documentazione : vale più di quanto possa sembrare. Molte vulnerabilità di sicurezza derivano da semplici errori derivanti da un fraintendimento del codice stesso. Meno errori fai, meglio è, anche nel contesto della sicurezza.
Inoltre, introdurrei principi come "DRY" in questo mix, poiché le vulnerabilità della sicurezza a volte sono il risultato di assunzioni fuori sincrono all'interno del codice. Più luoghi specifichi un singolo valore, più è probabile che ti dimenticherai di cambiarne uno, il che può portare a vulnerabilità della sicurezza. Ricordo una regola dei "compiti senza numeri magici" quando ho studiato CS, in cui a tutte le costanti numeriche è stato assegnato un nome. È una buona politica avere per molte ragioni.
-
Isolamento dei privilegi : un po 'più esoterico, ma importante in alcuni scenari. Il principio del privilegio minimo è qualcosa che gli studenti devono almeno avere familiarità con, per esempio; ma è difficile fare parte delle attività quotidiane.
-
Elementi specifici della sicurezza : ad esempio archiviazione della password, crittografia e cose del genere. Questo è più informativo che direttamente applicabile rispetto al lavoro scolastico, quindi non sono sicuro di dove si collochi rispetto alla pianificazione delle lezioni.
È importante conoscere attacchi come CSRF e token-rubare
attacchi in senso più astratto, ma probabilmente non in un
corso introduttivo dal momento che è un po 'avanzato.