|
|
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 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:.
|
|
|
|
|
[vb2008] Criptografare il file app.config
Ultimo Post 17 feb 2010 07.23 by Hidden. 11 Risposte.
|
Ordina:
|
| Autore |
Messaggi |
 |
 Posts:663
 |
|
 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.NET e l'Interoperabilità COM |
 |
Come utilizzare Dll non referenziabili per convertire un documento Word in PDF |
 |
|
2008/07/05 | Autore: Massimo Lofrano
|
|
|
|