8 messaggi dal 27 luglio 2013
Ciao a tutti, ho la necessità di proteggere file statici in una cartella di un sito e dopo aver letto un po' di documentazione ho trovato la soluzione ideale, ovvero la modifica del webconfig e la form
authentication.

tutto ok, in locale con IIS 7.5 e visual studio 2012 express mi funziona correttamente, poi pubblico sul server aruba e mi non funziona più nulla. Ad ogni accesso al sito mi restituisce questo errore:

Error Summary
HTTP Error 500.24 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
Detailed Error Information
Module  ConfigurationValidationModule
Notification  BeginRequest
Handler  ExtensionlessUrlHandler-Integrated-4.0
Error Code  0x80070032
Requested URL  http://www.xxx.it:80/
Physical Path  D:\Inetpub\webs\xxx
Logon Method  Not yet determined
Logon User  Not yet determined
Most likely causes:
system.web/identity@impersonate is set to true.


ovviamente su aruba ho attivato asp.net 4.0 con modalità integrata.
il mio web.config è così, non capisco proprio perchè non vada.

<configuration>
  <system.web>
      <compilation debug="false" targetFramework="4.0" />
    
      <authentication mode="Forms" >   
        <forms loginUrl="login.aspx" name=".ASPNETAUTH" ></forms>
      </authentication>
  </system.web>
  
    
  <location path="dati">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
  
  <appSettings>
    <add key="pathWeb" value="d:\inetpub\webs\xxx\"/>
    <add key="urlWeb" value="http://www.xxx.it/"/>
    <add key="SmtpServer" value="smtp.xxx.it"/>
    <add key="MailSito" value="info@xxx.it"/>
   <add key="titoloWeb" value="xxx Servizi "/>
  </appSettings>

  <connectionStrings>
    <add name="cnAccess" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\xxx.mdb;Persist Security Info=True" providerName="System.Data.OleDb"/>
  </connectionStrings>

    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules> 
  </system.webServer>

</configuration>


grazie in anticipo!
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
penso che nel web.config che hai postato non ci siano configurazioni particolari che possano generare quell'errore.

Nel testo dell'errore si legge questo:
system.web/identity@impersonate is set to true.


Controlla che nel web.config che hai su Aruba tu non abbia inserito questa riga:
<identity impersonate="true" />

Oppure usa uno dei workaround indicati qui al punto "2. ASP.NET applications produce a warning when the application enables request impersonation":
http://mvolo.com/breaking-changes-for-aspnet-20-applications-running-in-integrated-mode-on-iis-70/

Comunque, tu hai un server dedicato oppure sei in hosting condiviso?

ciao,
Moreno

Enjoy learning and just keep making
8 messaggi dal 27 luglio 2013
Ciao, grazie mille per la risposta. Mi è stata decisamente utile.
L'hosting di Aruba è un normalissimo hosting condiviso.

Grazie al link che mi hai passato ho visto che usando

<validation validateIntegratedModeConfiguration="false" />


l'errore è sparito.

Ho quindi impostato in questo modo il sistema per proteggere completamente i file (compresi gli statici come pdf, zip e doc) in questo modo:

nel web.config ho bloccato l'accesso alla cartella public

<location path="public">
    <system.web>
      <authorization>
        <deny users="?"/>        
      </authorization>
    </system.web>
  </location>


in questo modo risulta impossibile scaricare qualsiasi file dalla cartella public, anche sapendo l'url e il nome del file.

nelle pagine di download, accessibili solo tramite login, invece utilizzo questa funzione

protected void gvElenco_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        try
        {
            if (e.CommandName == "ApriFile")
            {
                LinkButton lk = e.CommandSource as LinkButton;
                string pathFile = e.CommandArgument.ToString();
                string nomeFile = Path.GetFileName(pathFile);
                Response.Buffer = false;
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + nomeFile);
                Response.TransmitFile(e.CommandArgument.ToString());
                Response.End();
            }
        }
        catch (Exception exc)
        {
            VisualizzaErrore(exc.Message);
        }
        finally
        {
        }
    }


che mi avvia in automatico il download dei file, al click del mouse, dai linkButton presenti nel gridview con l'elenco dei documenti scaricabili.

funziona tutto perfettamente, anche con file zip di grosse dimensioni.
Grazie ancora per l'aiuto!

ciao, emanuele
11.886 messaggi dal 09 febbraio 2002
Contributi
Benone :)
Ho solo una cosa da aggiungere in merito a questo:

Sberegondo ha scritto:

in questo modo risulta impossibile scaricare qualsiasi file dalla cartella public, anche sapendo l'url e il nome del file.

E' vero, grazie alla direttiva <deny users="?"/> gli utenti anonimi non potranno accedervi. Se li vuoi bloccare tutti, compresi coloro che sono autenticati, allora usa il simbolo *.
<deny users="*" />


In alternativa puoi spostare i file nella cartella App_Data che è già configurata come hidden segment e perciò il download di qualsiasi cosa si trovi lì dentro verrà impedito da IIS.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.