Casa Finanza personale Programmazione c ++: 10 suggerimenti anti-hacker - manichini

Programmazione c ++: 10 suggerimenti anti-hacker - manichini

Sommario:

Video: Nuovo Corso C++11 ITA 24: esercizi su if - else, prima parte 2024

Video: Nuovo Corso C++11 ITA 24: esercizi su if - else, prima parte 2024
Anonim

Come programmatore C ++, devi imparare le cose che dovresti fare nel tuo codice C ++ per evitare di scrivere programmi che sono vulnerabili agli hacker. Sono inoltre descritte le funzionalità che è possibile abilitare se supportate dal sistema operativo, ad esempio Indirizzo spazio layout Randomization (ASLR) e Data Execution Prevention (DEP).

Non fare supposizioni sull'input dell'utente

La visione del tunnel del programmatore va bene durante la fase di sviluppo iniziale. Ad un certo punto, tuttavia, il programmatore (o, meglio ancora, qualche altro programmatore che non aveva nulla a che fare con lo sviluppo del codice) ha bisogno di sedersi e dimenticare il problema immediato. Ha bisogno di chiedersi: "Come reagirà questo programma all'input illegale? “

Ecco alcune regole per il controllo dell'input:

  • Non fare ipotesi sulla lunghezza dell'input.

  • Non accettare più input di quanti ne abbia spazio nei buffer a lunghezza fissa (o buffer usati a dimensione variabile).

  • Controllare l'intervallo di ogni valore numerico per assicurarsi che abbia senso.

  • Cerca e filtra i caratteri speciali che possono essere usati da un hacker per iniettare il codice.

  • Non passare l'input non elaborato su un altro servizio, ad esempio un server di database.

E eseguire tutti gli stessi controlli sui valori restituiti dai servizi remoti. L'hacker potrebbe non essere sul lato di input, potrebbe essere sul lato della risposta.

Gestisce gli errori con garbo

Il tuo programma dovrebbe rispondere in modo ragionevole ai guasti che si verificano all'interno del programma. Ad esempio, se la chiamata a una funzione di libreria restituisce un nullptr, il programma dovrebbe rilevarlo e fare qualcosa di ragionevole.

Ragionevole qui è da intendersi abbastanza liberamente. Il programma non ha bisogno di annusarsi per capire esattamente perché la funzione non ha restituito un indirizzo ragionevole. Potrebbe essere che la richiesta fosse per troppa memoria a causa di input irragionevoli. Oppure potrebbe essere che il costruttore abbia rilevato un qualche tipo di input illegale.

Non importa. Il punto è che il programma dovrebbe ripristinare il suo stato nel miglior modo possibile e impostarlo per il prossimo bit di input senza arrestare o danneggiare strutture di dati esistenti come l'heap.

Mantenimento di un registro programmi

Creare e gestire registri di runtime che consentano a qualcuno di ricostruire ciò che è accaduto in caso di un errore di sicurezza. (In realtà, questo è altrettanto vero in caso di qualsiasi tipo di errore.) Ad esempio, probabilmente si desidera eseguire il log ogni volta che qualcuno accede o esce dal sistema.

Vorrete sicuramente sapere chi è stato registrato nel vostro sistema quando si è verificato un evento di sicurezza - questo è il gruppo più a rischio di perdite di sicurezza e che sono più sospettosi quando cercano i colpevoli.Inoltre, ti consigliamo di registrare qualsiasi errore di sistema che includa la maggior parte delle eccezioni.

Un programma di produzione reale contiene un numero elevato di chiamate che assomigliano a quanto segue:

log (DEBUG, "Utente% s password legale inserita", sUser);

Questo è solo un esempio. Ogni programma avrà bisogno di qualche tipo di funzione di registro. Indipendentemente dal fatto che sia effettivamente chiamato log () è irrilevante.

Segui un buon processo di sviluppo

Ogni programma dovrebbe seguire un processo di sviluppo formale ben congegnato. Questo processo dovrebbe includere almeno i seguenti passaggi:

  • Raccogliere e documentare i requisiti, inclusi i requisiti di sicurezza.

  • Rivedi il design.

  • Aderire a uno standard di codifica.

  • Sottoposti al test unitario.

  • Effettuare test di accettazione formali basati sui requisiti originali.

Inoltre, è necessario condurre revisioni tra pari nei punti chiave per verificare che i requisiti, il design, il codice e le procedure di prova siano di alta qualità e conformi agli standard aziendali.

Implementare il controllo di una buona versione

Il controllo della versione è una cosa strana. È naturale non preoccuparsi della versione 1. 1 quando sei sotto la pistola per ottenere la versione 1. 0 fuori dalla porta e nelle mani tese degli utenti in attesa. Tuttavia, il controllo della versione è un argomento importante che deve essere affrontato in anticipo perché deve essere incorporato nella progettazione iniziale del programma e non essere chiuso in un secondo momento.

Un aspetto quasi banale del controllo della versione è sapere quale versione del programma sta usando un utente. Quando un utente chiama e dice "Fa questo quando clicco su di esso", l'help desk ha davvero bisogno di sapere quale versione del programma sta usando l'utente. Potrebbe descrivere un problema nella sua versione che è già stato risolto nella versione corrente.

Autenticazione sicura degli utenti

L'autenticazione dell'utente deve essere semplice: l'utente fornisce un nome account e una password e il programma controlla il nome dell'account in una tabella e confronta le password. Se le password corrispondono, l'utente è autenticato. Ma quando si tratta di antihacking, niente è così semplice.

Innanzitutto, non memorizzare mai le password nel database. Questo è chiamato memorizzarli nel chiaro ed è considerato una forma molto cattiva. È fin troppo facile per un hacker mettere le mani sul file delle password. Invece, salvare una trasformazione sicura della password.

Gestisci sessioni remote

È possibile formulare determinati presupposti quando tutte le applicazioni vengono eseguite su un singolo computer. Per prima cosa, una volta che l'utente si è autenticato, non è necessario preoccuparsi che si trasformi in un'altra persona. Le applicazioni che comunicano con un server remoto non possono fare questa supposizione: un hacker che sta ascoltando sulla linea può aspettare fino a quando l'utente si autentica da solo e poi dirotta la sessione.

Cosa può fare il programmatore orientato alla sicurezza per evitare questa situazione? Non si desidera chiedere ripetutamente all'utente la sua password solo per assicurarsi che la connessione non sia stata dirottata. La soluzione alternativa è stabilire e gestire una sessione . A tale scopo, il server invia l'applicazione remota un cookie di sessione una volta che l'utente si è autenticato correttamente.

Obfuscate il vostro codice

L'offuscamento del codice è l'atto di rendere l'eseguibile tanto difficile da comprendere per un hacker possibile.

La logica è semplice. Più è facile per un hacker capire come funziona il tuo codice, più facile sarà per l'hacker scoprire le vulnerabilità.

Il singolo passo più semplice che puoi fare è assicurarti di distribuire solo una versione del tuo programma che non include le informazioni sui simboli di debug. Quando crei per la prima volta il file di progetto, assicurati di selezionare sia la versione di debug che quella di rilascio.

Mai e poi mai distribuire versioni della tua applicazione con le informazioni sui simboli incluse.

Firma il tuo codice con un certificato digitale

La firma del codice funziona generando un hash sicuro del codice eseguibile e combinandolo con un certificato rilasciato da un'autorità di certificazione valida. Il processo funziona in questo modo: la società che crea il programma deve prima registrarsi con una delle autorità di certificazione.

Una volta che l'autorità di certificazione è convinta che My Company è un'entità software valida, emette un certificato. Questo è un numero lungo che chiunque può utilizzare per verificare che il titolare di questo certificato sia la famosa My Company di San Antonio.

Usa la crittografia sicura ovunque sia necessario

Come ogni buon avvertimento, questa ammonizione ha diverse parti. In primo luogo, "Usa la crittografia ovunque sia necessario. "Questo tende a far pensare a come comunicare le informazioni sul conto bancario su Internet, ma dovresti pensare in termini più generali.

I dati che vengono comunicati, sia su Internet che su un intervallo più piccolo, sono generalmente noti come Dati in movimento. I dati in movimento devono essere crittografati a meno che non siano inutili per un hacker.

I dati memorizzati sul disco sono noti come Dati a riposo. Questi dati dovrebbero anche essere crittografati se esiste la possibilità che il disco venga perso, rubato o copiato. Le aziende criptano sistematicamente i dischi rigidi sui loro laptop aziendali nel caso in cui un laptop venga rubato dallo scanner di sicurezza in aeroporto o lasciato in un taxi da qualche parte.

I piccoli dispositivi di archiviazione portatili come le pen drive sono particolarmente suscettibili di essere persi - i dati su questi dispositivi devono essere crittografati.

Programmazione c ++: 10 suggerimenti anti-hacker - manichini

Scelta dell'editore

Come utilizzare le funzionalità dell'app Klout su dispositivi Apple - dummies

Come utilizzare le funzionalità dell'app Klout su dispositivi Apple - dummies

L'esperienza mobile di Klout è più limitato rispetto al sito web completo. Tuttavia, molte funzionalità sono ancora disponibili con l'app per dispositivi mobili, incluso dare + K ai tuoi influenzatori, controllare il tuo punteggio Klout e apportare semplici modifiche al tuo profilo. E con l'implementazione di Klout per il tuo iPhone Passbook puoi persino usare Klout per ottenere ...

Metriche dei social media: App Android SDK di Google Analytics - dummies

Metriche dei social media: App Android SDK di Google Analytics - dummies

Tracciamento delle metriche di un'applicazione ( un'app) è stata semplificata, ma le app sono ancora isolate. Puoi tenere traccia di ogni app, ma le soluzioni sono ancora in fase di creazione per tenere traccia di tutte le app. Per andare avanti con Google Analytics SDK per la tua app Android, segui questi passaggi: Scarica l'SDK di Google Analytics per Android. Aggiungi la libreria libGoogleanalytics. jar ...

Metriche sui social media: individuazione del momento di trazione con Google+ - dummies

Metriche sui social media: individuazione del momento di trazione con Google+ - dummies

In i social media, il momento di trazione potrebbe anche essere chiamato il "miglior tempo per condividere su Google+ o altri siti sociali. "Il momento migliore per te potrebbe non essere il momento migliore per i tuoi colleghi generatori di contenuti. (Il merito di questo suggerimento principale va a Christopher Penn che per primo condivise la sua osservazione sulla ricerca ...

Scelta dell'editore

Combinazione di due foto sulla tua Nikon D3400 con sovrapposizione immagini - manichini

Combinazione di due foto sulla tua Nikon D3400 con sovrapposizione immagini - manichini

L'opzione Sovrapposizione immagini sulla Il menu di ritocco di Nikon D3400 consente di unire due foto in una. Questa opzione è stata utilizzata per combinare una foto di un lupo mannaro, mostrato a sinistra, con una scena da giardino notturno, mostrata nel mezzo. Il risultato è l'immagine spettrale mostrata a destra. Oooh, spaventoso! Su ...

Scelta di una modalità Esposizione per una Nikon DSLR - manichini

Scelta di una modalità Esposizione per una Nikon DSLR - manichini

La prima impostazione da prendere in considerazione quando si le riprese con la tua Nikon D3100, D5100 o D7000 sono la modalità di esposizione, che puoi selezionare tramite la ghiera dei modi. La tua scelta determina la quantità di controllo che hai rispetto a due impostazioni di esposizione critiche - diaframma e tempo di posa - oltre a molte altre opzioni, incluse quelle relative ...

Scelta del formato immagine JPEG per una reflex Nikon - dummies

Scelta del formato immagine JPEG per una reflex Nikon - dummies

Offerte Nikon D3100, D5100 o D7000 i due tipi di file comuni nella maggior parte delle fotocamere digitali odierne: JPEG e Camera Raw, o semplicemente Raw in breve, che passa dallo specifico moniker NEF (Nikon Electronic Format) sulle fotocamere Nikon. Il tipo di file, talvolta noto anche come formato file, determina come i dati dell'immagine ...

Scelta dell'editore

Comprensione della struttura delle classi Java - dummies

Comprensione della struttura delle classi Java - dummies

Impossibile creare un'applicazione Java senza creare una classe. Tuttavia, i modi in cui si usano le classi all'inizio quando si apprendono su di essi sono stati relativamente semplicistici - Java è in grado di avere una complessità considerevolmente maggiore, che è il punto di questo capitolo. Le classi hanno una struttura specifica. Proprio come i progetti ...

Come utilizzare i metodi astratti in Java - dummies

Come utilizzare i metodi astratti in Java - dummies

Sia le interfacce che le classi astratte hanno metodi astratti in Java. Ma i metodi astratti giocano ruoli leggermente diversi in questi due tipi di tipi di riferimento. Come puoi tenere tutto dritto nella tua mente? La prima cosa da fare è ricordare che nessuno impara a conoscere i concetti di programmazione orientata agli oggetti senza ottenere molti ...

Come utilizzare l'interfaccia CharSequence in Java - dummies

Come utilizzare l'interfaccia CharSequence in Java - dummies

L'API Java include un'interfaccia utile chiamata CharSequence. Tutte e tre queste classi - String, StringBuilder e StringBuffer - implementano questa interfaccia. Questo metodo esiste principalmente per consentire di utilizzare String, StringBuilder e StringBuffer in modo intercambiabile. A tal fine, molti dei metodi delle classi String, StringBuilder e StringBuffer utilizzano CharSequence come parametro ...