Linguaggi di programmazione per la sicurezza? [duplicare]

0

Sono uno studente di informatica interessato al settore della sicurezza e ho appena ricevuto alcune domande.

Quali sono i pro e i contro dell'uso di C # per scopi di sicurezza, avevo ipotizzato che le applicazioni programmate in C # sarebbero state più inclini all'hacking ecc. rispetto al C ++ visto che si trattava di un linguaggio di livello superiore e quindi meno "potenti" comunque io ho letto online che C ++ e C di solito non sono raccomandati per ragioni di sicurezza, in quanto i buffer overflow causano molti problemi di sicurezza.

Quali sono i linguaggi di programmazione "migliori" e "peggiori" da imparare per la sicurezza e perché? È appena arrivato alla preferenza?

Chiedo scusa per le domande vaghe, sono ancora un principiante, correggimi se ho commesso errori.

Grazie in anticipo!

    
posta Rav 22.05.2014 - 16:57
fonte

2 risposte

2

I linguaggi di livello inferiore come C e C ++ possono essere definiti come lingue "non sicure" in quanto impongono al programmatore molte responsabilità per sistemare le cose. Ad esempio, quando si accede e l'elemento array arr[i] il compilatore C presuppone che il programmatore sappia cosa sta facendo e che i sia un indice valido per l'array arr .

Linguaggi di livello superiore come C # e Java trattano il programmatore come un idiota e eseguono controlli di runtime per assicurarsi che arr punti a una posizione di memoria valida, che i sia un indice valido per questo array, ecc. i controlli di runtime aggiungono un sovraccarico, ma nelle applicazioni consumer in cui l'efficienza non è fondamentale quanto mantenere bassi i costi di sviluppo.

Se sei interessato alla sicurezza, ti suggerirei di studiare C e C ++ dato che ti troverai di fronte a problemi come i buffer overflow, le corruzioni nell'heap, l'uso dopo le ecc. ecc.

I linguaggi di livello superiore come Java sono progettati per persone che non conoscono o si preoccupano della sicurezza e fanno tutto il possibile per nascondere questi problemi sia all'utente che al programmatore, il che non ti aiuterà a conoscere questi problemi, ma ti insegnano solo a ignorarli.

Molte applicazioni sono scritte in linguaggi di alto livello ma i linguaggi di basso livello saranno sempre rilevanti perché qualcuno ha bisogno di costruire le piattaforme che eseguono le cose di livello superiore. Quasi tutti gli ambienti di runtime Java sono scritti in C ++ e quasi tutti i sistemi operativi sono scritti in C. I linguaggi di scripting come Python Ruby e Perl sono scritti in C. Ruby potrebbe essere un linguaggio sicuro da programmare, ma potrebbe esserci sempre un bug nel macchina virtuale sottostante.

    
risposta data 22.05.2014 - 17:22
fonte
0

Ogni lingua, suppongo, ha i suoi pro e contro dal punto di vista della sicurezza, ma non sono sicuro che possano necessariamente essere classificati nella scala peggiore.

Molte lingue, ad esempio, sono specifiche del dominio e quindi un'intera categoria di implicazioni sulla sicurezza potrebbe non essere applicabile a loro (o addirittura renderle comparabili). Ad esempio, SQL è un linguaggio, ma non è uno stack, e quindi non ha un concetto di stack di chiamata (nonostante l'eccezione di exec ) e quindi gli attacchi di stack stacking non sono applicabili al linguaggio SQL stesso (ma potrebbe essere ancora applicabile a SQL DB e / o parser). Quindi potresti argomentare che è più sicuro (cioè "migliore" come lo hai definito tu) anche se non vedo davvero come sia possibile confrontare i due in quanto i due hanno capacità, applicabilità, scopi, ecc. Molto diversi tra loro.

In altri casi, le lingue possono dipendere dall'implementazione. In altre parole, dipende dall'interprete / compilatore che segue le specifiche e le specifiche del linguaggio non ambigue. Di per sé può cadere in errori di codifica / logici.

C # ha certamente alcuni meccanismi integrati nel linguaggio / framework che risolve alcuni dei punti di dolore rispetto a C / C ++. L'overflow del buffer è sicuramente un popolare vettore di attacco in quanto è troppo facile fare questa categoria di errori in C / C ++, e C # lo rende più difficile (non impossibile anche se consente unsafe costrutti), ma anche ha la sua insidie . (Detto questo, data la scelta e l'idoneità di entrambe le lingue per un dato compito, probabilmente sceglierei C # su C ++ in parte per rendere più facile gestire alcuni di questi aspetti.) Tuttavia, le vulnerabilità come SQLI o XSS non sono dipendente dalla lingua (anche se forse dipende dal framework) ma piuttosto sono errori di igiene / logica dei dati. Suppongo che un sito web sviluppato in qualsiasi lingua (al contrario del framework) abbia suscettibilità a XSS / SQLI se non attento. Sicuramente nessuna lingua può proteggere definitivamente dal programmatore esponendo dati che non dovrebbero essere esposti a causa di errori logici.

    
risposta data 22.05.2014 - 17:29
fonte

Leggi altre domande sui tag