Contattataci

Struttura del corso

1. Sicurezza informatica e programmazione sicura

  • Principi fondamentali della sicurezza: riservatezza, integrità e disponibilità (CIA) nell’ambito delle applicazioni Java.
  • Ciclo di vita dello sviluppo software sicuro (SSDLC): come integrare la sicurezza in ogni fase, dalle specifiche all’implementazione finale.
  • Paradigmi della programmazione sicura: approccio difensivo a più livelli, principio del minimo privilegio e impostazioni predefinite sicure.
  • Classificazione delle vulnerabilità: comprendere il CWE (Common Weakness Enumeration) e l’elenco OWASP.

2. Sicurezza delle applicazioni web

  • Analisi approfondita dell’OWASP Top Ten: in particolare i problemi legati agli attacchi di tipo Injection, all’autenticazione malfunzionante e alla divulgazione non autorizzata di dati sensibili.
  • Cross-Site Scripting (XSS): scenari di attacco basati su XSS riflesso, memorizzato o legato al DOM in applicazioni Java/JSP.
  • Cross-Site Request Forgery (CSRF): meccanismi d’attacco e implementazione dei token anti-CSRF.
  • Gestione delle sessioni: sicurezza dei cookie, prevenzione della fissazione delle sessioni e impostazione di timeout adeguati.
  • Sicurezza delle API: tecniche per proteggere gli endpoint REST e SOAP da abusi e accessi non autorizzati.

3. Sicurezza dei servizi web

  • Servizi web contro applicazioni web tradizionali: differenze nelle superfici di attacco.
  • Sicurezza a livello del trasporto: configurazione corretta di SSL/TLS per client e server Java.
  • Protezione dei messaggi: garantire integrità e riservatezza ai dati trasmessi.
  • Standard di autenticazione: implementazione di OAuth 2.0, OpenID Connect e JWT (JSON Web Tokens).

4. Sicurezza XML

  • Vulnerabilità nella elaborazione dei documenti XML: come prevenire gli attacchi tipo XXE.
  • Validazione degli schemi XML: procedure corrette per l’applicazione rigorosa delle definizioni di schema.
  • Firme digitali XML: metodi per garantire la non ripudiabilità dei dati mediante firme elettroniche.
  • Crittografia XML: tecniche standard per l’protezione dei contenuti XML.

5. Fondamenti della sicurezza in Java

  • Architettura di sicurezza di Java: il pacchetto java.security e la gestione dei provider.
  • Provider di sicurezza: come installare e configurare componenti aggiuntivi quali Bouncy Castle.
  • Controllo degli accessi: utilizzo di policy files, permessi e del Security Manager (considerando sia le versioni precedenti che quelle moderne).
  • Gestione dei KeyStore: creazione e mantenimento di archivi di chiavi e certificati.

6. Crittografia pratica

  • Algoritmi crittografici: panoramica sugli algoritmi simmetrici (AES), asimmetrici (RSA, ECC) e di hashing (SHA-256/512).
  • Generazione dei numeri casuali: rischi legati all’utilizzo di java.util.Random rispetto a java.security.SecureRandom.
  • Gestione delle chiavi: tecniche per la generazione, l’archiviazione e il rotazionamento sicuro delle chiavi.
  • Architettura crittografica di Java (JCA): uso dei pacchetti CipherMessageDigest e Mac.
  • Espansione crittografica di Java (JCE): conoscenza dei file di politica e delle limitazioni legate alla potenza computazionale consentita.

7. Servizi di sicurezza in Java

  • Sicurezza SSL/TLS: utilizzo di SSLSocketFactory e HttpsURLConnection.
  • Gestione della fiducia: personalizzazione dei meccanismi di verifica per ambienti PKI privati.
  • Autenticazione programmatica: utilizzo di Authenticator.getDefault() per effettuare operazioni di identificazione in modo automatizzato.
  • Analisi dei certificati: come leggere e interpretare i certificati X.509 tramite programmazione Java.

8. Sicurezza in Java EE

  • Sicurezza dichiarativa: controllo degli accessi basato sui ruoli tramite il file web.xml e le annotazioni.
  • Sicurezza programmatica: utilizzo di HttpServletRequest.isUserInRole() e getRemoteUser() per determinare i privilegi dell’utente.
  • JAAS (Java Authentication and Authorization Service): configurazione del file login.conf e implementazione di moduli specifici tramite la classe LoginModule.
  • Sicurezza dei servlet: definizione di vincoli e modalità di autenticazione gestite dal container (FORM, BASIC, DIGEST).

9. Errori comuni nella scrittura del codice e vulnerabilità associate

  • Deserializzazione non sicura: rischi derivanti dall’utilizzo di ObjectInputStream senza adeguate verifiche.
  • Iniezione di comandi: misure necessarie per prevenire attacchi basati sull’esecuzione non autorizzata di istruzioni OS.
  • Attraversamento dei percorsi: tecniche per la sanitizzazione degli input riguardanti il filesystem.
  • Abusi legati alla riflessione: rischi derivanti dall’uso improprio di java.lang.reflect e dai tentativi di eludere i controlli d’accesso.
  • Credenziali hardcoded: come individuare e rimuovere informazioni sensibili dal codice sorgente.
  • Errori nella implementazione crittografica: utilizzo di modalità errate, chiavi deboli o vettori IV non variabili.

10. Fonti informative e strumenti utili

  • Strumenti di analisi statica: utilizzo di SonarQube, Checkmarx e Fortify per effettuare scansioni automatizzate.
  • Strumenti di analisi dinamica: panoramica su Burp Suite e OWASP ZAP.
  • Banche dati CVE: come monitorare le vulnerabilità emergenti nel framework Java e reagire prontamente.
  • Materiali didattici consigliati: elenco di libri, documentazione ufficiale e checklists utili per la programmazione sicura.

Requisiti

Nessun prerequisito richiesto.

 21 ore

Numero di Partecipanti


Prezzo per partecipante

Recensioni (4)

Corsi in Arrivo

Categorie relative