I 10 errori più pericolosi nella programmazione C? [chiuso]

2

Quali sono i principali errori pericolosi nella programmazione in C?

ad esempio, un uso improprio di strcpy provoca uno stack overflow e l'iniezione di codice.

Sto cercando almeno 10 pattern di programmazione errati in C.

    
posta NewMrd 09.08.2013 - 10:40
fonte

3 risposte

1

Penso che il modo migliore per imparare la risposta a questa domanda sia leggere un sacco di libri e fare le migliori pratiche. Ti consiglio questo libro Secure Coding in C e C ++ su tutti gli argomenti sulla codifica sicura in c.

    
risposta data 09.08.2013 - 11:29
fonte
4

L'errore più pericoloso nella programmazione C è utilizzando C . Questa è un'affermazione impopolare, ma decenni di esperienza mi sostengono.

C è un bel linguaggio di programmazione in quanto consente di esprimere le operazioni in una "macchina astratta" (così è lo standard C) che verrà tradotto efficientemente in codice macchina (gli strumenti di traduzione funzionano velocemente e il risultato è veloce). Tuttavia, questa traduzione ha un prezzo elevato, vale a dire che non sono una garanzia per gli errori, e ci sono molti "comportamenti indefiniti" in agguato nell'ombra. Le regole di aliasing dei puntatori , ad esempio, non vengono quasi mai capite correttamente, portando a un codice apparentemente buono che fallirà (a volte in modi che creare vulnerabilità sfruttabili) quando viene utilizzato un compilatore più recente o attivato un interruttore di ottimizzazione.

Cercare una "lista di errori" è la mentalità sbagliata. Vuoi una lista nera: cose da evitare, partendo dal presupposto che "tutto il resto" è sicuro. Dovresti desiderare una lista bianca : un elenco di modi di sviluppo consentiti , ad esclusione di tutto il resto. I programmatori C di successo sono programmatori che sono in grado di mantenere la propria disciplina per mai utilizzare qualsiasi costruzione che non padroneggiano da capo a capo; e con "padronanza" intendo la capacità di descrivere come il compilatore C lo tradurrà in opcodi assembly, incluse tutte le possibili ottimizzazioni che i compilatori C sono autorizzati a fare.

Un buon modo per "usare C" è scrivere una o due routine che hanno veramente bisogno di velocità in alcuni C ottimizzati, e il resto del codice in un linguaggio più sicuro che ti permetterà di essere più veloce, più facile e più sicuro (ad es. Python, C #, Node.js, Perl ... la scelta è grande).

    
risposta data 09.08.2013 - 13:46
fonte
1

Puoi consultare CWE / SANS i 25 errori più pericolosi del software . Questo è per lo sviluppo del software in generale (indipendentemente dal linguaggio di programmazione), ma include anche errori fatti in C / C ++.

    
risposta data 09.08.2013 - 11:26
fonte

Leggi altre domande sui tag