58 messaggi dal 23 agosto 2005
www.fabal.it
Salve ho dato uno sguardo anche nelle varie sezioni(oltre a google), non sono sicuro che quanto descritto faccia al mio caso.
Sto scrivendo una web application con asp.net e c# per la mia azienda che utilizza la connessione ad un db sqlCe 4 protetto da password. Il problema e' che per connettermi al db usando le connection string e Entity Framework mi trovo nel web.config la password del db in chiaro. E' vero che il file e' protetto e non puo' essere acceduto dall'esterno, tuttavia chi amministra il server chi ha le credenziali per le cartelle ftp potrebbe vederlo,e non credo sia una cosa buona. Ho visto che e' possibile criptare parti del web.config ma se non ho capito male l'operazione deve essere fatta sul server che ospitera' il sito, e nel mio caso non si puo' perche' non ho accesso al server a quel livello. Sapete un modo :-(

Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

fabal ha scritto:

tuttavia chi amministra il server chi ha le credenziali per le cartelle ftp potrebbe vederlo, e non credo sia una cosa buona

Penso che un piano di hosting condiviso ti vada un po' stretto in questa situazione. Probabilmente avresti bisogno di almeno un paio di account FTP, di cui uno amministrativo e uno con privilegi limitati.

Comprendi bene che l'economicità dell'hosting condiviso porta con sé limitazioni come questa.
Puoi comunque risolvere con soluzioni alternative, di dubbia efficacia ma comunque sufficienti a scoraggiare utenti poco esperti.

Per esempio, potresti rimuovere la password dal web.config e inserirla nel codice che usi per collegarti al database. Compilalo in un assembly dll (cosa che già avviene se la tua è una webapplication, anziché un website), in modo che non sia visibile in chiaro.
Usa un SqlCeConnectionStringBuilder per integrare la password nella connection string che hai letto dal web.config.

var builder = new SqlCeConnectionStringBuilder(
    ConfigurationManager.ConnectionStrings["nomeConnString"].ConnectionString
    );
builder.Password = "abcd";
using (var conn = new SqlCeConnection(builder.ConnectionString))
{
  builder.Clear();    
  conn.Open();
  // altro codice
}


fabal ha scritto:

Ho visto che e' possibile criptare parti del web.config ma se non ho capito male l'operazione deve essere fatta sul server.

Esatto, anche se tecnicamente è una limitazione del provider. Se la tua applicazione fosse pubblicata su Microsoft Azure, per esempio, potresti cifrare la sezione del web.config in locale e poi caricare il certificato nel server, in modo che quella stessa sezione possa essere decifrata.
http://eren.ws/2014/02/04/encrypting-the-web-config-file-of-an-azure-cloud-service/

ciao,
Moreno
Modificato da BrightSoul il 22 aprile 2014 22.08 -

Enjoy learning and just keep making
58 messaggi dal 23 agosto 2005
www.fabal.it
Scusate come posso far conciliare la riscrittura della connection string con entity framework? Uso il 4.

--
Quindi con un host condiviso il problema c'è sempre anche se usassi un db più serio.

:-(
Modificato da fabal il 25 aprile 2014 08.53 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

fabal ha scritto:

Uso il 4.

Si può fare. Sia che il tuo contesto stia derivando da ObjectContext che da DbContext, puoi eseguire quella logica dal suo costruttore.

Quindi prova così:


public class TuoContesto : DbContext {
    //questo costruttore rimappa su quello base e gli fornisce la connection string
    public TuoContesto():base(RecuperaConnectionString()) {
    }
    //questo metodo si occupa di completare la connection string
    private static string RecuperaConnectionString() {
        var builder = new SqlCeConnectionStringBuilder(
                ConfigurationManager.ConnectionStrings["nomeConnString"].ConnectionString
            );
        builder.Password = "abcd";
        return builder.ConnectionString;
    }
}


ciao,
Moreno
Modificato da BrightSoul il 25 aprile 2014 14.08 -

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.