| Utilizzo dell'elenco di controllo | |
| Considerazioni sulla progettazione | |
| Considerazioni sulle categorie dell'applicazione | |
| Impostazioni del file di configurazione |
Questo elenco di controllo è correlato al modulo 10 "Creazione di pagine e controlli di ASP.NET protetti", al modulo 19 "Protezione dell'applicazione ASP.NET e dei servizi Web" e al modulo 20 "Hosting di più applicazioni Web". Utilizzarlo quale riferimento per proteggere un'applicazione ASP.NET e come istantanea dei moduli corrispondenti.
| Controllo | Descrizione |
| Le decisioni sulla protezione non devono basarsi su convalide dal lato client; vengono prese sul lato server. |
| Il sito Web è suddiviso in aree ad accesso pubblico e aree con restrizioni, che richiedono l'autenticazione. Nella navigazione fra tali aree le informazioni riservate delle credenziali non devono essere trasmesse. |
| Le identità utilizzate per accedere a risorse remote da applicazioni Web ASP.NET vengono riconosciute chiaramente. |
| Sono stati identificati metodi per proteggere credenziali, ticket di autenticazione e altre informazioni sensibili sulla rete e negli archivi permanenti. |
| È stato identificato un approccio protetto alla gestione delle eccezioni. In caso di eccezioni, l'applicazione si disattiva in modo protetto. |
| Il sito dispone di controlli dettagliati delle autorizzazioni per pagine e directory. |
| I controlli Web, i controlli utente e il codice di accesso alle risorse sono tutti suddivisi nei propri assembly per una protezione granulare. |
| Controllo | Descrizione |
| L'input dell'utente viene convalidato per tipo, lunghezza, formato e intervallo. L'input viene controllato prima per i dati noti, validi e sicuri, quindi per quelli dannosi o pericolosi. |
| Le stringhe di input dei campi dei moduli vengono convalidate mediante espressioni regolari (ad esempio, tramite il controllo RegularExpressionValidator). |
| I normali controlli HTML, le stringhe di query, i cookie e altre forme di input vengono convalidate utilizzando la classe Regex e/o il codice di convalida personalizzato. |
| Il controllo RequiredFieldValidator viene utilizzato dove occorre immettere dati. |
| Le verifiche degli intervalli nei controlli server vengono effettuate dai controlli RangeValidator. |
| L'input in formato libero viene sterilizzato per eliminare dati dannosi. |
| I nomi dei file di input sono in formato corretto e la loro validità è verificabile nel contesto dell'applicazione. |
| L'output che contiene l'input viene codificato mediante HtmlEncode e UrltEncode. |
| MapPath limita la mappatura tra applicazioni, dove appropriato. |
| La codifica dei caratteri è impostata dal server (si consiglia ISO-8859-1). |
| L'opzione validateRequest di ASP.NET versione 1.1 è abilitata. |
| URLScan è installato sul server Web. |
| L'opzione cookie HttpOnly consente la protezione su più livelli per contribuire a evitare lo scripting fra siti (in Internet Explorer 6.1 o versioni successive). |
| I parametri SQL vengono utilizzati nel codice di accesso ai dati per convalidare la lunghezza e il tipo di dati e contribuire a evitare l'inserimento SQL. |
| Controllo | Descrizione |
| Il sito è suddiviso in aree ad accesso con restrizioni e pubbliche. |
| Gli URL assoluti vengono utilizzati per navigare nelle aree dove il sito è suddiviso in cartelle protette e non protette. |
| SSL viene utilizzato per proteggere credenziali e cookie di autenticazione. |
| L'attributo slidingExpiration è impostato su "false" e se i cookie non sono protetti mediante SSL si utilizzano time-out limitati per i cookie di autenticazione. |
| Il cookie di autenticazione moduli è limitato alle connessioni HTTPS utilizzando l'attributo requireSSL o la proprietà cookie Secure. |
| Il cookie di autenticazione è crittografato e verificato per l'integrità (protezione="All"). |
| I cookie di autenticazione non sono permanenti. |
| I cookie dell'applicazione hanno combinazioni nome/percorso univoche. |
| I cookie di personalizzazione sono separati da quelli di autenticazione. |
| Le password non vengono memorizzate direttamente nell'archivio utente; al loro posto vengono salvati i digest delle password con salt. |
| Le credenziali di rappresentazione (se si utilizza un'identità fissa) vengono crittografate nel file di configurazione utilizzando Aspnet_setreg.exe. |
| Per l'autenticazione vengono implementati criteri per password complesse. |
| L'elemento <credentials> non viene utilizzato all'interno dell'elemento <forms> per l'autenticazione basata su form (ricorrervi solo per le verifiche). |
| Controllo | Descrizione |
| L'autorizzazione URL viene utilizzata per il controllo dell'accesso di pagine e directory. |
| L'autorizzazione dei file viene utilizzata con l'autenticazione di Windows. |
| Le richieste di autorizzazione Priorità di protezione vengono utilizzate per proteggere l'accesso a classi e membri. |
| Se è richiesta un'autorizzazione molto specifica, si utilizzano i controlli espliciti dei ruoli. |
| Controllo | Descrizione |
| Il recupero del file di configurazione viene bloccato utilizzando HttpForbiddenHandler. |
| Per eseguire ASP.NET viene utilizzato un account con minori privilegi. |
| Le credenziali dell'account personalizzato (se utilizzate) vengono crittografate nell'elemento <processModel> mediante Aspnet_setreg.exe. |
| Per applicare criteri a livello del computer, le impostazioni Web.config sono bloccate mediante allowOveride="false" in Machine.config. |
| Controllo | Descrizione |
| SSL viene utilizzato per proteggere dati riservati in rete. |
| I dati sensibili non vengono trasmessi fra le pagine; vengono aggiornati utilizzando la gestione dello stato sul lato server. |
| I dati sensibili non vengono memorizzati nei cookie, nei campi nascosti dei moduli o nelle stringhe di query. |
| La memorizzazione nella cache di output per le pagine contenenti dati sensibili è disattivata. |
| Le password in testo normale vengono evitate nei file Web.config e Machine.config (per la crittografia delle credenziali si utilizza Aspnet_setreg.exe). |
| Controllo | Descrizione |
| Il cookie della sessione viene protetto mediante SSL su tutte le pagine che richiedono accesso autenticato. |
| Il servizio di stato sessione è disabilitato, se non viene utilizzato. |
| Il servizio di stato sessione (se utilizzato) viene eseguito tramite un account con minori privilegi. |
| L'autenticazione di Windows viene utilizzata per connettersi al database di stato di Microsoft® SQL Server™. |
| L'accesso ai dati di stato in SQL Server è limitato. |
| Le stringhe di connessione vengono crittografate mediante Aspnet_setreg.exe. |
| Il canale di comunicazione verso l'archivio dello stato è crittografato (IPSec o SSL). |
| Controllo | Descrizione |
| Lo stato della visualizzazione viene protetto mediante codici di autenticazione dei messaggi (MAC). |
| Sulle stringhe di query con segreti del server viene eseguito l'hashing. |
| Tutti i parametri di input vengono convalidati. |
| Page.ViewStateUserKey viene utilizzata per contrastare gli attacchi "con un clic". |
| Controllo | Descrizione |
| Viene utilizzata la gestione strutturata delle eccezioni. |
| I dettagli delle eccezioni vengono registrati sul server. |
| Pagine di errore generiche con messaggi innocui vengono restituite al client. |
| Sono implementati gestori di errore a livello dell'applicazione o delle pagine. |
| L'applicazione distingue fra errori e condizioni di eccezione. |
| Controllo | Descrizione |
| Il processo ASP.NET è configurato per permettere di creare nuove origini di eventi in fase di esecuzione o generare origini di eventi dell'applicazione al momento dell'installazione. |
| Controllo | Descrizione |
| <trace/> <trace enabled="false"> |
| <globalization> |
| <httpRuntime> |
| <compilation> <compilation debug="false" . . ./> |
| <pages> <pages enableViewState="false" . . ./> Se l'applicazione utilizza lo stato della visualizzazione, enableViewState e enableViewStateMac sono impostate su "true", per individuare la manomissione di tale stato.
<pages enableViewState="true" enableViewStateMac="true" /> |
| <customErrors> <customErrors mode="On" /> Una pagina di errore generica viene specificata dall'attributo defaultRedirect.
<customErrors mode="On" defaultRedirect="/apperrorpage.htm" /> |
| <authentication> <location path="" allowOverride="false">
<system.web>
<authentication mode="Windows" />
</system.web></location> |
| <forms> <forms loginUrl="Restricted\login.aspx" protection="All" requireSSL="true" timeout="10" name="AppNameCookie" path="/FormsAuth" slidingExpiration="true" /> Il cookie di autenticazione è crittografato e verificato per l'integrità (protection).
|
| <identity> <identity impersonate="true" userName="registry:HKLM\SOFTWARE\YourApp\ identity\ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\YourApp\ identity\ASPNET_SETREG,password"/> |
| <authorization> |
| <machineKey> <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" /> Se l'applicazione Web ASP. NET è in esecuzione in una Web farm, si utilizzano chiavi computer specifiche, che vengono copiate in tutti i server della farm.
|
| <sessionState> |
| <httpHandlers> <add verb="*" path="*.rem" type="System.Web.HttpForbiddenHandler"/> |
| <processModel> <processModel userName="Machine" password="AutoGenerate" L'account di sistema non viene utilizzato per eseguire il processo ASP.NET. <processModel userName="registry:HKLM\SOFTWARE\MY_SECURE_APP\ processmodel\ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\MY_SECURE_APP\ processmodel\ASPNET_SETREG,password" . . ./> Se l'applicazione utilizza servizi Enterprise, comAuthenticationLevel e comImpersonationLevel sono configurate in modo appropriato. |
| <webServices> |
| Controllo | Descrizione |
| Stato sessione. Per evitare l'affinità con il server, lo stato della sessione ASP.NET viene gestito all'esterno al processo nel database dello stato di SQL Server ASP.NET o nel servizio di stato out-of-process eseguito su un computer remoto. |
| Crittografia e verifica. Le chiavi utilizzate per crittografare e verificare i cookie di autenticazione basata su form e il relativo stato di visualizzazione sono le stesse in tutti i server di una Web farm. |
| DPAPI. DPAPI non può essere utilizzato con la chiave computer per crittografare i dati comuni ai quali devono avere accesso tutti i server della farm. Per crittografare dati condivisi su un server remoto, utilizzare un'implementazione alternativa, come 3DES. |
| Controllo | Descrizione |
| Le applicazioni dispongono di chiavi computer distinte.
<machineKey validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps" . . . /> |
| Per ciascuna applicazione sono abilitate combinazioni nome/percorso univoche per i cookie di autenticazione moduli. |
| Per isolare l'applicazione in Microsoft Windows® Server 2003 si utilizzano vari processi (pool applicazione IIS 6.0). |
| Per isolare l'applicazione in Windows 2000 si utilizzano vari account utente anonimi (e rappresentazioni). |
| Chiavi computer comuni sono abilitate su tutti i server in una Web farm. |
| Per l'hosting di più applicazioni su un singolo server, si utilizzano chiavi computer separate per ciascuna applicazione. |
| I livelli di attendibilità della protezione dall'accesso di codice consentono di isolare i processo e limitare l'accesso alle risorse di sistema (richiede .NET Framework versione 1.1). |
| Controllo | Descrizione |
| File ASP.NET temporanei %windir%\Microsoft.NET\Framework\{version}Temporary ASP.NET FilesAccount di processo e identità rappresentate ASP.NET: Controllo completo |
| Directory temporanea (%temp%) Account di processo ASP.NET: Controllo completo |
| Directory .NET Framework %windir%\Microsoft.NET\Framework\{version}Account di processo e identità rappresentate ASP.NET: |
| Directory di configurazione .NET Framework %windir%\Microsoft.NET\Framework\{version}\CONFIGAccount di processo e identità rappresentate ASP.NET: |
| Directory principale sito Web C:\inetpub\wwwroot o il percorso al quale è diretto il sito Web predefinito |
| Directory principale del sistema %windir%\system32 Account di processo ASP.NET: Lettura |
| Cache assembly globale %windir%\assembly Account di processo e identità rappresentate: Lettura |
| Directory contenuto C:\inetpub\wwwroot\YourWebApp Account di processo: C:\ C:\inetpub\ C:\inetpub\wwwroot\ |
| Controllo | Descrizione |
| Le autorizzazioni Web IIS sono configurate. |
| Le impostazioni di autenticazione sono state rimosse (qualsiasi accesso è negato). |