giovedì 4 giugno 2020

Italian Delphi Day e 10.4 Sydney

Italian Delphi Day 2020

Dopo lo strepitoso successo dei webinar di Delphi & Dintorni, adesso è il turno del Delphi Day  2020 edizione digitale!


12 sessioni tecniche gratuite tutte su Delphi divise in 3 giornate per darti la possibilità (anche dal lavoro) di seguirle comodamente, ricordati solo che, diversamente dagli altri anni, ti devi iscrivere alle singole sessioni che vorrai seguire. La quarta giornata è invece un incontro virtuale ma, assolutamente libero, tra tutti gli speaker e i partecipanti alla conferenza!

Le sessioni saranno fruibili da un client di Zoom scaricabile gratuitamente per il tuo sistema operativo


Delphi 10.4 Sydney


Con la nuova versione di Delphi (C++ Builder, RAD Studio) appena uscita e ricca di novità (puoi già scaricarla ed installarla), puoi iscriverti alle sessioni di Marco Cantù al Delphi Day 2020 e ascoltare dalle parole del Product Manager di Delphi tuttè le novità della nuova versione in 2 sessioni completamente tecniche e no marketing!

Nella prima sessione scoprirete le novità della versione, dal nuovo Language Server Protocol ai Custom Managed Records, dalla VCL a FMX per Windows e Mobile, per finire con le novità di installazione, IDE e GetIt.

La seconda sessione sarà concentrata sulla VCL che continua ad essere la migliore libreria client per Windows 10, con un supporto ancora esteso per monitor High-DPI e ulteriori integrazioni con i componenti del sistema operativo come il motore di Edge. Dalle API a WInRT, dallo Store al formato APPX, da ImageCollection a VirtualImage sono tante le novita' recenti che potremo esplorare in dettaglio.



Che dire quindi, iscrivetevi subito e... buona visione!



Paolo Rossi
Wintech Italia Srl

mercoledì 22 aprile 2020

Defensive programming

Il 21 aprile ho tenuto un webinar sulla sicurezza. In particolare abbiamo parlato di SQLInjection, cross-site scripting e gestione delle password.

Per quanto riguarda quest’ultima parte ho fatto una distinzione a seconda dei casi d’uso della password in stessa. Se infatti la password è necessaria per implementare un nostro meccanismo di login, allora l’ideale è salvarla sotto forma di HASH, magari con l’aggiunta di un salt (Password Storage Cheat Sheet). Ma se è necessario poter decifrare la password per usarla ad esempio durante l’autenticazione ad un servizio terzo (un server database, di posta o un’API ReST) ovviamente questa soluzione non è praticabile.

In questo caso è necessario salvare la password cifrandola con un algoritmo reversibile come AES. Il problema è: dove metto la chiave usata per la cifratura? Questa è proprio la domanda che mi ha fatto uno dei partecipanti al seminario.

Il problema è che non c’è una risposta risposta che vada bene in ogni caso possibile. Questo infatti è un caso di defensive programming, cioè un tipo progettazione del codice dove si cerca di adottare strategie che facciano funzionare il programma in tutti i casi anche se non sappiamo esattamente il tipo di problema da cui ci stiamo difendendo.

In questo caso dobbiamo fare una serie di ragionamenti, per esempio se la password è salvata sul database la chiave crittografica dovrà stare da un’altra parte. Il ragionamento generale è che password è chiave crittografica devono stare in due posti diversi, in modo che se uno risulti compromesso possiamo sperare che l’altro non lo sia.

Un’altra soluzione potrebbe essere salvare la chiave direttamente nell’eseguibile, magari cercando di nasconderla in qualche modo, per esempio in esadecimale o come array di byte. Questo renderebbe il recupero della chiave un po’ più complicato, ma per un attaccante motivato non è certo un ostacolo insormontabile, in più lascerebbe la chiave visibile a chiunque abbia accesso ai sorgenti (di certo non è una buona idea nei progetti Open Source).

In alcuni casi è possibile usare delle apposite API del sistema operativo. Su Windows c’è DPAPI (Data Protection Application Programming Interface) che fondamentalmente usa la password dell’utente di Windows come master password. Il limite è che chi cifra la password deve avere le stesse credenziali di chi la decifra.

Se poi l’applicazione usa già servizi cloud, sia Microsoft che Amazon offrono servizi di storage sicuro (Amazon KMS o Azure Key Vault).
Insomma come già dicevo durante il Webinar non esiste una soluzione semplice ma è necessario valutare la migliore strategia che risolva il nostro problema.

Happy coding.