Autorizzazione IIS vs. ASP.NET: il modo più semplice per proteggere i file statici?
-
06-07-2019 - |
Domanda
Diciamo che ho un seguente in un web.config:
<allow roles="Developers" />
<deny users="*"/>
Ciò blocca l'accesso su .aspx, .asmx e altri tipi di file .NET, ma consente comunque agli utenti non autorizzati di aprire file statici come image.jpg. Capisco perché a web.config non vengono richieste informazioni di autorizzazione quando qualcuno chiede image.jpg (non è un tipo .NET e IIS può ignorarlo), ma come posso bloccare un'intera applicazione?
I consigli che ho trovato online includono:
- crea una
<location>
voce per la directory in questione e IIS / .NET la raccoglierà. (Non sembra.) - devi scrivere il tuo filtro ISAPI e mappare le estensioni di tutti i file sensibili.
- non è necessario scrivere il proprio filtro ISAPI: basta mappare le estensioni su aspnet_isapi.dll.
- non è necessario modificare IIS, basta creare una voce httpHandler in web.config per le estensioni. (Preferirei davvero non provare a farlo per ogni estensione nell'applicazione.)
Niente di tutto questo funziona così facilmente come ricordo che mi trovo in Apache. Qual è la cosa più semplice che potrebbe funzionare per chiedere a un visitatore una password e non servire alcun file (statico o no) a qualsiasi utente che non ce l'ha?
Soluzione
Abilita mapping dei caratteri jolly per IIS 6 . Questo invierà tutti i file attraverso la pipeline ASP.NET, garantendo l'autent del modulo per tutti i file. Degraderà le prestazioni (non so quanto).
Per IIS 5, um, aggiornare a IIS 6.
Elenchi 4 idee:
-
La posizione
-
funziona solo se è stata mappata la wild card (o sono state mappate estensioni specifiche).
-
Chi vuole scrivere un filtro isapi? Non puoi farlo facilmente in lingue gestite a meno che tu non abbia IIS7. E chi vuole scrivere un filtro isapi c ++?
-
la mappatura dei caratteri jolly funziona con le avvertenze (prestazioni) sopra riportate
-
Ancora una volta, l'ultima opzione non funzionerà senza registrare quelle estensioni specifiche con IIS e instradarle attraverso aspnet.
Altri suggerimenti
Un bel modo semplice è quello di aggiornare a IIS 7, ora ha una pipeline integrata.