Sempre più frequentemente i nostri clienti richiedono (giustamente) degli audit di sicurezza e le applicazioni InDe (soprattutto quelle Foundation) ed il web server IIS passano sotto la lente di ingrandimento.
Noi usiamo prevalentemente IIS sotto Windows quindi vorrei condividere best-practice e considerazioni su come configurarlo per le applicazioni e per Teamworks.
Protocolli
Di solito utilizziamo il tool IISCrypto ( https://www.nartac.com/Products/IISCrypto/ ) con la configurazione STRICT per disabilitare TLS 1.0 ed 1.1 e vari cypher suite obsoleti.
Disabilito poi manualmente la cyper suite “3DES 168”
Redirect dalla porta 80 alla 443
tramite URL rewrite abilito il redirect automatico dalla porta 80 alla 443. i passaggi sono questi : https://www.ssl.com/how-to/redirect-http-to-https-with-windows-iis-10/
Headers
al file web.config aggiungiamo degli headers di tipo:
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains"/>
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="Referrer-Policy" value="strict-origin" />
</customHeaders>
</httpProtocol>
Che però non sono sicuro funzionino anche con il sistema di sincronizzazione di Inde ( è in fase di verifica)
Un ottimo sito di riferimento per questo test è : https://securityheaders.io
Teamworks
Capitolo a parte per Teamworks che non funziona senza TLS 1.0 che però è estremamente insicuro. Purtroppo non è possibile nemmeno intervenire sul codice di teamworks.
Su questo punto sono preoccupato in quanto di fatto tutto il nostro lavoro (che risiede su Teamworks) è esposto all’esterno su un sito potenzialmente attaccabile.
Per quanto riguarda la sicurezza come vi state muovendo ?
quali sono le vostre best practice in ambito IIS / Foundation ?
3 Mi Piace
Aggiungo una domanda per tutti voi per capire come gestite ( o non gestite) un ulteriore aspetto di sicurezza.
Se carico un file su server potrei renderlo disponibile attraverso https://dominio/files/nomefile.jpg.
All’interno dell’applicazione INDE basterebbe fare riferimento a questo URL ed il file sarebbe sempre disponibile. Il problema è che è disponibile sia che io sia loggato sia che non lo sia.
Mi chiedo: E’ possibile dire ad IIS di permettere il download di un file in base allo stato di sessione di un app INDE (se sono loggato scarico altrimenti no)? (IIS + C#)
1 Mi Piace
Noi usiamo questa modalità:
- I file degli utenti sono in una cartella parallela alla root dell’applicazione, IIS non ne ha accesso.
- DeleteAfterDownload = true
- Forniamo i file tramite OpenDocument (dopo averi copiati nella temp).
In questo modo è l’applicazione che fornisce i file e non IIS, quindi possiamo eseguire tutte le verifiche che vogliamo. Inoltre il file è fornito in streaming e l’utente non ha modo di sapere da dove provenga.
Nel caso in cui vogliamo che il file sia visualizzato all’interno dell’applicazione e non semplicemente servito al browser, lo leggiamo trasformandolo in base 64 e fornendo la stringa risultante (stando attenti a specificare il formato corretto), applicandola ad esempio ad una etichetta di pannello.
Se invece la struttura dei file da servire è più complessa, per esempio file html con più iframe che a loro volta richiamano altri file html, copiamo l’intera cartella nella temp e usiamo quella.
L’ultima soluzione non mi piace ma non abbiamo trovato di meglio. Sono interessato anch’io a conoscere soluzioni alternative
.
Tutti gli altri file, su cui non abbiamo particolati necessità, sono ad accesso libero tramite url, quindi tramite IIS.
1 Mi Piace
Ciao @r.bianco stiamo facendo degli esperimenti per capire se è possibile apoplicare lo stesso principio anche a file come immagini che normalmente vengono scaricati tramite una GET. Abbiamo provato la strada delle API ma purtroppo non possono ritornare file binari. Appena terminato il test aggiornerò la discussione
1 Mi Piace