Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
[vb2008] Criptografare il file app.config
Ultimo Post 17 feb 2010 07.23 by Hidden. 11 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi Non risolto

Posts:663

--
11 feb 2010 10.53  

Come da oggetto sto cercando in rete delle informazioni per capire come criptografare le informazioni sensibili presenti nel file app.config. Ho trovato qualcosa ma non sono riuscito compltamente a capirne il significato e l'utilizzo.
Da quel pò che ho visto nella documentazione msdn è come se il file venisse criptato al momento della compilazione (è questo non ho capito come farlo) e poi quando servono le informazione presenti vengono decriptate utilizzando un metodo specifico. Questo è quello che sono riuscito a capire come concetto. Ma quello che non ho capito è se ho capito bene e come applicare il tutto.

Qualcuno di voi ha qualche info in più in merito da darmi ho qualche tutorial o link più specifico e magari con qualche esempio?

Consono del fatto che ci sono molti modi per raggiungere lo stesso scopo, se qualcuno ha un modo diverso da quello illustrato nella documentazione MSDN sarei se potesse illustrarlo.

Grazie per il vostro aiuto.




Posts:811

--
12 feb 2010 13.54  
Non ho la più pallida idea relativa a come crittografare il file app.config, ma sto terminando un articolo con corredata mini libreria per la crittografia base, personalmente evito di usare l'app.config perché su quello che è la configurazione delle applicazioni devo avere il controllo totale e quindi preferisco essere io a decidere dove mettere le informazioni e come metterle.
Ti faccio sapere quando sarà pubblicato l'articolo.

saluti
Sabrina


Sabrina

Posts:29

--
14 feb 2010 20.04  
ciao, spero di non aver capito male la domanda: non so nulla a riguardo della configuarzione del file app.config per crittare e decrittare dati sensibili... se però ti stai interessando alla crittografia in generale ci sono vari metodi si! il il più semplice esempio da cui si parte è il cifrario di cesare:

http://it.wikipedia.org/wiki/Cifrario_di_Cesare

ti posto un piccolo esempio a console in c#: puoi copiare incollare in una applicazione console, eseguire e provare:

[code]

using System;

class Program
{
static string codifica(string testoInChiaro, int key)
{
string testoCifrato = "";

int i = 0;
while (i < testoInChiaro.Length)
{
char letter = testoInChiaro;
int l = (int)letter;
l += key;
letter = (char)l;
testoCifrato += letter;
i++;
}
return testoCifrato;
}

static string decodifica(string testoCifrato, int key)
{
string testoInChiaro = "";

int i = 0;
while (i < testoCifrato.Length)
{
char letter = testoCifrato;
int l = (int)letter;
l -= key;
letter = (char)l;
testoInChiaro += letter;
i++;
}
return testoInChiaro;
}

static void Main()
{
for (; ; )
{
string testoInChiaro;
int key;

Console.Write("\n Testo in chiaro: ");
testoInChiaro = Console.ReadLine();

Console.Write("\n Chiave: ");
key = Convert.ToInt32(Console.ReadLine());

string testoCifrato = codifica(testoInChiaro, key);
Console.Write("\n Testo cifrato: " + testoCifrato);

Console.Write("\n\n Testo decodificato: " + decodifica(testoCifrato, key));
Console.ReadLine();
}
}
}

[/code]

l' esempio non è molto raffinato ma dovrebbe rendere l' idea.

Il cifrario di cesare è il metodo + semplice, ce ne sono altri e di molto molto + complessi, comunque, guardando il mio codice ti accorgi che si necessita implementare un metodo epr crittare e uno per decrittare: dunque quei metodi, sofisticandoli quanto vuoi, li puoi applicare rispettivamente crittando il file prima di salvarlo e decrittandolo in lettura.

p.s. non sono sicuro di aver inteso la domanda, se la domanda era specifica per il file app.config o comunque di natura diversa da quella della mia risposta, mi scuso per malinteso.

ciao



Posts:663

--
15 feb 2010 09.00  
Ti ringrazio Mimmo per l'aiuto diciamo che la domanda è volta nello specifico per quanto riguarda il file app.config però da quello che ho compreso in rete il codice che hai postato potrebbe essere utilizzato tranquillamente.


per Sabrina
personalmente evito di usare l'app.config perché su quello che è la configurazione delle applicazioni devo avere il controllo totale e quindi preferisco essere io a decidere dove mettere le informazioni e come metterle.


Scusa allora giusto per capire come gestisci tu la modifica del percorso del database. Dove salvi la connectionstring? Che metodo usi? Come eviti che utenti (anche con poca dimistichezza) accedano ai dati sensibili?
Grazie

p.s. Complimenti per il restyling del sito.



Posts:29

--
15 feb 2010 11.56  

Dove salvi la connectionstring? Che metodo usi? Come eviti che utenti (anche con poca dimistichezza) accedano ai dati sensibili?


comunque, giusto per dialogare se l' applicazione è una applicazione web e il file di configurazione è web.config, per quanto riguarda la domanda sù, io mi limito a scrivere il tutto nel code behind, cioè nel file aspx.cs

se tu fai le connessioni in maniera wysiwyg i percorsi vengono salvati nell' html della pagina, perciò visibilissimo, ma se ti occupi di gestire la cosa in un file separato, questi dati non sono + accessibili.

p.s. siccome mi stanno nascendo malintesi, qua e là nel forum, premetto che sto partecipando alla discussione per imparare, se sono di troppo mi defilo senza che vi arrabbiate



Posts:435

--
15 feb 2010 12.26  
Ciao,
partendo dal presupposto che il web.config non e' accessibile lato utente (browser), l'unico modo per aprirlo e' "da dietro", ovvero accedendo alla cartella via filesystem.
Se qualcuno accede li vuol dire che ha i permessi per farlo, oppure hai un buco di sicurezza tale che ci passa un elefante.
Detto questo, se vuoi stare tranquillo puoi iniziare a limitare l'accesso alla cartella e relativo contenuto gia a livello filesystem, e se poi vuoi dormire ancor piu tranquillo puoi cifrare solo i dati sensibili e non tutto il file config.
Su questo sito:

http://www.eggheadcafe.com/articles/20020331.asp

c'e' una rticoletto che spiega come fare.
La cosa vale anche per le applicazioni winform che usano ini o config, che sono ancor piu vulnerabili dal momento che l'utente ha accesso alla cartella dell'applicazione per ovvi motivi, almeno in lettura.

HTH
Max



Posts:663

--
15 feb 2010 13.44  
Diciamo che a me la cosa interessa a livello WinForms. Ma nel code behind se modifico il percorso o meglio la connectionstring del mio database e inserisco la connectionstring in code behind non devo poi ricompilare la soluzione? Io per esempio ho fatto alcuni programmini che si collegano a database sql attraverso l'attach file quindi che non necessitano dell'sql server express installato. Il quale tutto il database e ridotto a due file di cui un mdf. In questi programmi dò all'utente l'opportunità di scegliere dove posizionare il suo database. Quindi gli faccio modificare il percorso nella connectionstring attraverso una form di impostazione.
Questo fatto in totale autonomia da parte dell'utilizzatore senza dover ricompilare il progetto.

Penso che l'articolo suggeritomi da Max anche se si applica maggiormente a web.config sia in parte la risposta alla mia domanda. Ma ora sarei curioso di capire il metodo che per esempio usa Sabrina o qualcun'altro per modificare la connectionstring senza dover ricompilare il programma.


Grazie per il vostro aiuto



Posts:29

--
15 feb 2010 16.20  

Diciamo che a me la cosa interessa a livello WinForms. Ma nel code behind se modifico il percorso o meglio la connectionstring del mio database e inserisco la connectionstring in code behind non devo poi ricompilare la soluzione?


in questo caso, indifferenemente che sia una applicazione web o desktop, credo che non bisogni ricompilare niente: se scrivi il codice "a mano" , cioè senza fare gli attachments. o come si chiamano, implementerai un metodo Open che si occupi di gestire la connessione, a questo metodo puoi passare la connection string che preferisci ( che è composta anche dal path del tuo database), il metodo Open lo richiami dal gestore di evento che preferisci, se durante la sua esecuzione trova il database specificato, avrai stabilito la connessione, altrimenti avrai una eccezione.

E' opportuno chiudere la connessione col db subito dopo averlo interrogato e non tenerla aperta per tutta la durata dell' applicazione, per es:

è corretto fare, in pseudocodice:

Open(strConnection, db);
Interrogazione_1(strQuery);
Close();

Open(strConnection, db);
Interrogazione_2(strQuery);
Close();

e non è corretto fare:

Open(strConnection, db);
Interrogazione_1(strQuery);
Interrogazione_2(strQuery);
Close();

anche potendolo.

In tal modo, ogni volta che decidi di richiamare il metodo Open per stabilire la connessione al db, potrai scegliere la connection string e il db da passarli.



Posts:663

--
16 feb 2010 07.42  
Ti ringrazio per le tue buone intenzioni ma non mi è chiaro il meccanismo. Il mio problema è proprio passargli una nuova connectionstring e che venga salvata da qualche parte in modo che al riavvio del programma la connectionstring sia quella nuova.

Forse non mi sono espresso correttamente, riformulo in maniera diversa la mia domanda con un esempio così magari sarà più chiaro.

Il mio programma al momento dell'installazione installa il file database mdf nella cartella c:\programmi\MioProgramma quindi io preimposto la connectionstrin in modo che vada a leggere il database nella cartella c:\Programmi\MioProgramma.

Ora l'utente finale che utilizza il mio programma vuole spostare il file database nel percorso d:\Database. Quindi io gli creo una maschera dove lui può andare a modificare il percorso del database nella connectionstring. Dove salvo la nuova connectionstring in modo tale che quando l'utente rilancia il programma la connectionstring sia quella nuova? Fino ad ora la salvavo il app.config ora che ho visto che è poco affidabile sarei curioso di capire come gestire in modo sicuro la cosa.

Qualcuno mi ha suggerito di salvare solo il percorso del database nel file app.config è questa potrebbe essere un'idea ma se volessi cambiare anche l'utente e le password al database?

Quindi la mia domanda è dove salvare il tutto in modo nascosto a occhi indiscreti?

Grazie



Posts:662

--
16 feb 2010 08.30  
Quindi la mia domanda è dove salvare il tutto in modo nascosto a occhi indiscreti?

In allegato c'è un progetto che ti permette di salvare la stringa di connessione crittografata in un file e recuperarla.
HTH
Alberto

Attachment: 005_004_003_002_001_WindowsApplication1.zip


Posts:435

--
16 feb 2010 09.55  
Inserito da Hidden su 16 feb 2010 08.42

Il mio programma al momento dell'installazione installa il file database mdf nella cartella c:\programmi\MioProgramma quindi io preimposto la connectionstrin in modo che vada a leggere il database nella cartella c:\Programmi\MioProgramma.

Ora l'utente finale che utilizza il mio programma vuole spostare il file database nel percorso d:\Database. Quindi io gli creo una maschera dove lui può andare a modificare il percorso del database nella connectionstring. Dove salvo la nuova connectionstring in modo tale che quando l'utente rilancia il programma la connectionstring sia quella nuova? Fino ad ora la salvavo il app.config ora che ho visto che è poco affidabile sarei curioso di capire come gestire in modo sicuro la cosa.

Qualcuno mi ha suggerito di salvare solo il percorso del database nel file app.config è questa potrebbe essere un'idea ma se volessi cambiare anche l'utente e le password al database?

Quindi la mia domanda è dove salvare il tutto in modo nascosto a occhi indiscreti?

Grazie


Ciao, perdonami, ma mi sfugge il perche' tu debba nascondere il percorso ed il nome del file mdf. Se faccio un "trova file" sul pc trovo tutti i file mdf presenti sul pc, compreso il tuo.
Quello che invece (giustamente) devi tenere riservato sono utenti e password di accesso. E quelli li leggi e scrivi criptati con uno dei mille modi che ci sono a disposizione. l'unica cosa che hai scritta nel codice potrebbe essere la chiave di cifratura, sempre che non usi sitemi ancor piu evoluti. ma il gioco vale la candela ???

Max



Posts:663

--
17 feb 2010 07.23  
Ti ringrazio Alberto per il progetto d'esempio lo andrò subito a studiare.

Ciao, perdonami, ma mi sfugge il perche' tu debba nascondere il percorso ed il nome del file mdf. Se faccio un "trova file" sul pc trovo tutti i file mdf presenti sul pc, compreso il tuo.
Quello che invece (giustamente) devi tenere riservato sono utenti e password di accesso. E quelli li leggi e scrivi criptati con uno dei mille modi che ci sono a disposizione. l'unica cosa che hai scritta nel codice potrebbe essere la chiave di cifratura, sempre che non usi sitemi ancor piu evoluti. ma il gioco vale la candela ???


Su questo hai perfettamente ragione il punto è che io non voglio nascondere il percorso del file ma bensì la username e la password. Però a questo punto penso che la soluzione della crittografia sia l'unica strada. In un certo potrei per esempio inserire il percorso del database nella connectionstring e la user e password nasconderla o all'interno di un file nascosto e criptografato oppure direttamente dentro il codice nel caso non sia necessario modificarli.

Comunque grazie a tutti per il vostro aiuto.


Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Iniziare da zero con WPF (Parte 3)
Litigi, Divinità, Pennelli e Frigoriferi. (seconda parte)
2007/11/22 | Autore: Sabrina Cosolo
Introduzione a Windows Presentation Foundation (parte1)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
Le nostre Librerie nella finestra .NET di Add reference
Come fare in modo di visualizzare le nostre librerie nella finestra .NET dell'Add Reference di Visual Studio
2008/07/27 | Autore: Sabrina Cosolo
Ereditarietà applicata ai controlli
Creazione di una combobox che mostra immagini al posto del testo
2008/07/06 | Autore: Andrea Zingoni
Codedom Introduzione all'uso parte 1
Generare automaticamente codice C# o VB usando CodeDom ed il framework .NET stesso
2009/11/07 | Autore: Sabrina Cosolo
Codedom Introduzione all'uso parte3
La classe Helper per le funzionalità CodeDom
2009/11/07 | Autore: Sabna Cosolo
Miniguida alla OOP con il .NET Framework- Parte IV
Come gestire l'ereditarietà
2009/07/17 | Autore: Alberto De Luca
.NET e l'Interoperabilità COM
Come utilizzare Dll non referenziabili per convertire un documento Word in PDF
2008/07/05 | Autore: Massimo Lofrano
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.