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.