Ho alcuni file nella mia cartella Contenuto che non voglio che un utente possa scaricare senza essere autorizzato. Come posso impedire a un utente di accedere al file semplicemente digitando ... Content/{filename} nella barra degli indirizzi?Protezione delle cartelle in MVC
risposta
Ci sono un paio di possibilità. Il primo consiste nella utilizzando il tag <location>
nel web.config:
<location path="Content">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
Un'altra possibilità è quella di mettere i file all'interno di una cartella in cui nessuno può accedere (come la cartella App_Data per esempio) e poi hanno un azione di controllo questo servirà quei file che saranno decorati con l'attributo [Authorize]
.
Beh un modo è quello di avere al di fuori del contesto di IIS, così invece di averli sotto C:\inetpub\wwwroot
cambiamento a qualcosa come C:\temp\files
.
nel proprio DB dispone di un GUID associato al nome del documento e utilizza il GUID per visualizzare il collegamento al file.
nell'azione del controller, si accetterà il GUID, otterrà il nome file e servirà il file nella risposta.
non funziona per me.
<configuration>
<appSettings>
...
</appSettings>
<system.web>
...
</system.web>
<system.webServer>
...
</system.webServer>
<location path="Content">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
</configuration>
eseguo il mio MVC applicazione 4.0, di login e logout, non possono accedere a qualsiasi pagina app, ma ancora in grado di accedere al file dal link diretto come
http://localhost:80966/Content/Files/home.jpg
Dove sarebbe questo essere situato nel web. config? – user517406
All'interno dell'elemento '' e all'esterno ''. È alla radice. –
OK grazie, non ha funzionato subito come dovrebbe essere not :) –
user517406