Ecco di cosa parla lo sviluppatore. Vedi qui e qui per un elenco di vulnerabilità nel motore di runtime stesso. Se scorri fino alla fine di questa pagina e alla pagina successiva troverai più vulnerabilità che potrebbero essere rilevanti, a seconda di cosa c'è nel tuo stack software.
Perché?
Innanzitutto devi capire che Java è sia un server che un client. Come client, tenta di eseguire in modo accuratamente sandbox in cui il codice reciprocamente non attendibile può essere eseguito nello stesso spazio. Questo è un problema molto difficile, ed è usato in abbastanza "obiettivi molto interessanti" che sono stati fatti molti sforzi per infrangerlo. Il risultato è che la maggior parte dei browser ti darà grandi avvisi di sicurezza prima di abilitare Java. È semplicemente troppo facile per un utente malintenzionato inviarti qualcosa che, quando è gestito da JRE, farà ufficialmente cose cattive che il modello di sicurezza ha detto che non dovrebbe fare.
Generalmente le persone non eseguono codice non affidabile su un server, quindi la maggior parte di esse non si applica a te.
Naturalmente ci sono ancora vulnerabilità che si applicano. Ma qui abbiamo una domanda più complessa. È meglio avere vulnerabilità che si applicano a te, ma che trovi? O non conoscere le vulnerabilità che ti riguardano?
Java è un target di alto profilo, utilizzato in applicazioni di alto profilo. Quindi un sacco di sforzi va nella ricerca di bug. Ci sono molti bug pubblici. Che vanno in strumenti di attacco automatico. Che qualsiasi bambino possa usare, e qualsiasi amministratore decente può difendersi. Ma un tester di penetrazione avrà più difficoltà a trovarne uno nuovo che nessun altro ha già trovato.
Se usi uno stack software meno conosciuto, è probabile che ci siano un numero simile di bug, ma è stato fatto meno sforzo nel trovarli. Ciò significa che un bambino a caso con uno strumento di attacco che conosce un elenco di bug ha meno probabilità di trovare qualcosa. Ma qualsiasi penetrometro che esamina il tuo stack software avrà una giornata campale alla ricerca di attacchi a cui non puoi difenderti perché non li conosci.
Se stai scrivendo un'applicazione di alto profilo (software bancario, ecc.), devi assumere che gli attaccanti competenti sono un dato di fatto. Quindi qualcosa come Java ha senso lì. Se sei un avvio di piccole dimensioni, Java potrebbe non avere senso, ma onestamente per una startup, quanto sia vulnerabile la tua lingua è uno dei tuoi problemi meno importanti. Essere abbastanza grandi da farti attaccare da qualcuno sarebbe un buon problema.
E, a dire il vero, chiunque voglia entrare nel tuo sito si guarderà intorno per le iniezioni SQL ovvie e simili. La maggior parte dei quali sarà colpa tua, e non per colpa del tuo venditore. In realtà, la tua lingua non sarà la tua fonte principale di problemi di sicurezza. La tua programmazione è. Né è la tua seconda fonte di problemi di sicurezza. La tua errata configurazione dei tuoi sistemi è.
In breve, ci sono molti motivi per usare o non usare Java. (Personalmente evito la lingua.) Ma la sicurezza non è un buon motivo per stare alla larga, nonostante il gran numero di noti problemi di sicurezza.