Che cosa dovrebbero imparare gli studenti sulla sicurezza in un corso introduttivo di programmazione?

7

Alcune persone hanno sostenuto che la sicurezza dovrebbe essere integrata nei corsi di informatica, in tutto il curriculum. Supponiamo di aggiungere una lezione sulla sicurezza a un primo corso sulla programmazione. (Tieni presente che si tratta di un corso introduttivo di base, quindi argomenti avanzati non sono appropriati.) Quali sono le cose più importanti che gli studenti dovrebbero imparare sulla sicurezza, in quel contesto?

    
posta D.W. 16.03.2012 - 08:03
fonte

5 risposte

4

Se questa sarà solo una lezione e questa è la loro prima classe di programmazione , ritengo che la convalida dell'input sia l'argomento più valido da approfondire. Alcuni dei tuoi studenti avranno già difficoltà a capire come x = x + 1 (x è uguale a x + 1) quando x = 1 è solo la riga precedente ... cioè finché non si rendono conto che si tratta di un'istruzione di assegnazione.

Gli argomenti come la crittografia, ssl e sql injection devono essere integrati nei corsi che hanno progetti correlati in modo che possano essere applicati praticamente.

La convalida degli input, tuttavia, è qualcosa che porteranno con sé per il resto della loro carriera di ingegnere. Li aiuterà a mitigare le probabilità che il loro codice sia suscettibile di buffer overflow, XSS e (forse) SQL injection.

    
risposta data 16.03.2012 - 10:34
fonte
8

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.

risposta data 16.03.2012 - 09:04
fonte
2

Io e lo studente universitario avemmo quel tipo di corso, prima di tutto dovremmo insegnare come non fare errori nel codice intendo, come protezione contro SQL Injection, o insegnare come fare la propria connessione SSL e autorizzazione, e un po 'su crittologia, mi sono piaciute 7 sessioni di questo e tutti gli argomenti sono stati spiegati abbastanza bene ... (Voglio dire quegli argomenti non erano solo basi ...) Ora secondo me ci dovrebbe essere una lezione su come proteggere da SQL injection, e alcune cose sulla crittologia come il programma chiamato PARI ..., quelle dovrebbero essere di base

    
risposta data 16.03.2012 - 08:30
fonte
1

Indipendentemente dal linguaggio usato nell'educazione ci sono una serie di principi validi, quindi li ruberò da qui Security Ninja

  1. Convalida dell'input: controlla sempre i tuoi input da fonti non attendibili
  2. Convalida dell'output: assicurati che l'output sia appropriato per la destinazione (ad esempio caratteri di escape HTML ...)
  3. Gestione degli errori - non dare troppe informazioni all'attaccante
  4. Autenticazione e amp; autorizzazione - sapere come farlo
  5. Gestione della sessione
  6. Comunicazioni protette
  7. Gestione delle risorse sicure
  8. Archiviazione sicura

Impara e applica questi principi e qualsiasi software sviluppato successivamente avrà una qualità molto migliore.

    
risposta data 16.03.2012 - 10:12
fonte
0

Matt Bishop ha scritto alcuni articoli e ha una prefazione nel suo libro che ne discute

nob.cs.ucdavis.edu/book/book-aands/index.html

    
risposta data 21.11.2012 - 07:10
fonte

Leggi altre domande sui tag