10 errori di programmazione e codifica più comuni

10 errori di programmazione e codifica più comuni / Programmazione

Di seguito sono riportati alcuni degli errori di programmazione e codifica più comuni realizzati dagli sviluppatori. Questi errori hanno provocato interruzioni generalizzate, furto di dati, intrusioni e altro ancora. Alcuni degli errori Top 10 siti Web per codici di errore e risoluzione dei problemi Top 10 siti Web per codici di errore e risoluzione dei problemi Leggi di più sono particolari per alcuni linguaggi come C, C ++, ecc. Ma alcuni sono comuni in altri linguaggi come Java, JavaScript, Python ecc..

Ti consigliamo di controllare spesso questo elenco per assicurarti di non apportare alcuna di queste informazioni nel tuo codice. Questa lista è ordinata nell'ordine di importanza dall'alto verso il basso.

1. Overflow del buffer

L'overflow del buffer si verifica quando i dati vengono scritti in un buffer oltre la sua estremità. Può sorgere a causa di calcoli errati della posizione di scrittura. O scrittura continua in un buffer senza controllare la lunghezza. Qualunque sia la ragione, questo errore è uno dei più comuni e ha portato a grandi exploit. Alcuni di questi includono Morris Internet Worm 6 Virus informatici che hanno cambiato il mondo 6 Virus informatici che hanno cambiato il mondo Ieri abbiamo dato un'occhiata ad alcuni dei virus dannosi di alto profilo nella storia, e oggi esploreremo alcuni dei più quelli più oscuri. Il termine “virus” non era collegato al malware ... Leggi altro nel 1988, worm W32 / Nimda nel 2001 e errore Sendmail nel 2003.

A C Esempio:

char array [6] = "ciao"; strcat (array, ", joe"); / * <- This line causes a buffer overflow. */

Credito immagine: Cyber4All @Towson

2. Iniezione SQL

SQL Injection Che cos'è un'iniezione SQL? [MakeUseOf Explains] Che cos'è un'Iniezione SQL? [MakeUseOf Explains] Il mondo della sicurezza di Internet è afflitto da porte aperte, backdoor, buchi di sicurezza, trojan, worm, vulnerabilità dei firewall e una manciata di altri problemi che ci tengono tutti in punta di piedi ogni giorno. Per gli utenti privati, ... Read More è una tecnica per l'inserimento di comandi SQL nell'input dell'utente in modo tale che questi comandi vengano eseguiti direttamente dal database. Ciò consente all'utente malintenzionato di eseguire azioni dannose quali l'eliminazione di tabelle, l'eliminazione di database, il furto di dati e molto altro.

Una delle cause principali degli attacchi di SQL Injection è che il software applicativo che elabora l'input dell'utente esegue controlli e convalida insufficienti sull'input prima di passarlo al database per l'esecuzione.

Un esempio Java:

// Il seguente è un valore di parametro con SQL injection String username = "joe '; delete from user dove username come'%"; Connessione con = ...; // crea una connessione al database // Quando questa istruzione viene eseguita, tutti gli utenti vengono cancellati dal database. con.createStatement (). execute ("aggiorna user set logged_in = 1 where username = '" + username + "'"); 

3. Iniezione del comando OS

OS Command Injection nasce quando l'input specificato dall'utente viene direttamente trasmesso al sistema operativo per l'esecuzione dall'applicazione senza un controllo accurato. Tale operazione potrebbe essere utilizzata da un'applicazione per utilizzare un comando esistente sul sistema operativo. Quando l'applicazione passa l'input dell'utente senza validarlo adeguatamente, apre la strada a un utente malintenzionato di utilizzare costrutti intelligenti per eseguire comandi dannosi. Questi comandi possono essere, ad esempio, per eliminare file, rubare dati, modificare le autorizzazioni sui file e altro.

4. Intero Overflow o Wraparound

Un intero Le basi della programmazione per computer 101 - Variabili e tipi di dati Le basi della programmazione per computer 101 - Variabili e tipi di dati Avendo introdotto e parlato un po 'di programmazione orientata agli oggetti prima e da dove proviene il suo omonimo, ho pensato che fosse ora di passare alle basi assolute di programmazione in un modo specifico non linguistico. Questo ... Per saperne di più Errore di overflow si verifica quando si tenta di memorizzare un valore più grande in un tipo integrale di quello che si adatta. Quando ciò accade, il valore più grande viene troncato e l'operazione finisce per memorizzare un risultato imprevedibile. Ad esempio, un corto senza segno a 2 byte può memorizzare un valore massimo di 65535. Ora, immagina di aggiungere due brevi valori come 65530 e 10 e di memorizzare il risultato in un breve. Il risultato (65545) non si adatta in breve, lasciando un valore imprevedibile nel target short come risultato del troncamento. Quando successivamente si utilizza questo valore in un'altra operazione (come un indice di array), si otterranno risultati imprevedibili.

A C Esempio:

a breve a = 65530, b = 10; breve c = a + b; // sul mio computer, c ha il valore inaspettato: 4 

5. Convalida errata di un indice di matrice

Un altro errore molto comune riscontrato nel software è Validazione impropria di un indice di matrice. Si verifica quando si accede a un array Come array ed elenchi funzionano in Python Come funzionano gli array e gli elenchi in Python Le matrici e gli elenchi sono alcune delle strutture dati più utili nella programmazione, sebbene poche persone le utilizzino al massimo del loro potenziale. Leggi di più usando un indice che si trova al di fuori dei limiti dell'array. Quando si accede a una posizione al di fuori dei limiti di dati validi del programma, si ottiene un errore di accesso alla memoria (noto anche come violazione della segmentazione). Quando la posizione della memoria si trova all'interno dei limiti dei dati ma all'esterno dell'array, si sta osservando il danneggiamento della memoria quando si scrive in tali posizioni.

Questi tipi di errori sono più comuni con C e C ++, ma possono sorgere con qualsiasi linguaggio, anche quelli con gestione automatica della memoria come Java, JavaScript, Python, ecc. L'unico modo in cui tali errori possono essere mitigati nel software è programmatore, esercitando una sufficiente attenzione durante la codifica.

6. Assegnare risorse senza limiti

L'allocazione della memoria è molto comune in C e C ++ poiché tutta la gestione della memoria in queste lingue è manuale. L'allocazione della memoria senza un'adeguata convalida della dimensione allocata può causare il fallimento dell'allocazione. Quando il risultato di questa allocazione non è controllato ma utilizzato direttamente, si ha una ricetta per il disastro.

Questi tipi di errori sono anche possibili senza la gestione manuale della memoria come Java, JavaScript e Python durante l'allocazione degli array. Quindi è necessario prestare attenzione quando si assegnano gli array in queste lingue.

Un'altra possibilità di questo errore è quella di creare altre risorse come handle di file o handle di connessione senza un controllo appropriato. Non chiudere correttamente queste risorse quando hai finito di usarle è il modo più comune per raggiungere questi limiti di risorse.

7. Derefero del puntatore scaduto

In linguaggi come C e C ++, la memoria può essere liberata una volta che hai finito con esso. Utilizzo di un puntatore Introduzione ai puntatori per i programmatori Introduzione ai puntatori per i programmatori Che tu te ne renda conto o no, la maggior parte dei programmi che hai utilizzato utilizzano in qualche modo dei puntatori. Come programmatore, devi capire come funzionano i puntatori. Leggi altro su questo blocco di memoria che è già stato liberato è un errore. Questo tipo di errore è stato anche nelle notizie a causa di gravi interruzioni, quindi faresti bene a verificare che questo tipo di errore non si verifichi nel tuo codice.

8. Null Pointer Dereference

Un puntatore può avere un valore nullo prima che sia inizializzato correttamente (o dopo che la memoria è stata liberata). Il dereferenziamento di un tale puntatore causa un errore puntatore nullo (chiamato NullPointerException in Java). È molto comune in C, C ++ e Java, e sicuramente anche in altre lingue. Si dovrebbe prestare sufficiente attenzione nel codice per evitare questo tipo di errore.

Credito d'immagine: J.T.Presta

9. Inizializzazione mancante

Le variabili locali sono quelle dichiarate all'interno di una funzione (o un blocco) e cessano di esistere alla fine della funzione. Queste variabili sono allocate nello stack e avranno spazzatura casuale quando vengono dichiarate per la prima volta. Come programmatore è tuo dovere assegnare un valore adeguato a queste variabili non appena vengono dichiarate. Usandoli prima di tale inizializzazione risulta nel Inizializzazione mancante errore e sicuramente finirà in un incidente (o qualcosa di più devastante).

A C Esempio:

int pos; char buffer [] = "Ciao mondo"; // questa riga può stampare garbage e / o può bloccare il programma poiché pos non è inizializzato. printf ("Il valore del carattere nella posizione% d è:% c \ n", pos, buffer [pos]); 

10. Algoritmo crittografico rotto o rischioso

Il mondo della crittografia Come funziona la crittografia, ed è davvero sicura? Come funziona la crittografia, ed è davvero sicura? Leggi di più è in continua evoluzione. Ciò che è accettabile oggi potrebbe non essere più accettabile domani. Ciò potrebbe essere dovuto alla crescente potenza dei computer in cui le attività di calcolo che si ritiene richiederanno anni oggi potrebbero richiedere alcuni minuti domani. Oppure qualcuno trova un nuovo modo per rompere un particolare algoritmo che rende inutile quell'algoritmo. Quindi è necessario mantenere costantemente gli sviluppi in crittografia e aggiornare il codice (se è ancora in uso) se vengono scoperte vulnerabilità e hack negli algoritmi utilizzati.

Ad esempio, SHA-1, che è un algoritmo di hash, non è più raccomandato per il calcolo degli hash. Nel 2005, sono stati scoperti attacchi contro questo algoritmo e sono raccomandati SHA-2 o SHA-3. Quindi se il tuo codice utilizza SHA-1 in qualsiasi momento, dovrai sostituirlo con quello consigliato se il software è ancora in uso. Altrimenti corri il rischio che la tua applicazione sia aperta agli attacchi.

Sommario

Abbiamo coperto alcuni degli errori di programmazione e codifica più comuni in questo articolo. Puoi fare riferimento a questa lista spesso per assicurarti di evitarli.

Ti sei imbattuto in questi o altri errori che potrebbero portare a un attacco su larga scala del tuo sito Web o applicazione? Fateci sapere nei commenti qui sotto.

Immagine di credito: ajfile / Depositphotos

Scopri di più su: Hacking.