GeirGrusom Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Jeg har egentlig aldri brukt SQL databaser utenfor ASP.NET og PHP, men nå skal jeg lage et program som må kople til en SQL server fra et hvilket som helst sted i verden. Problemet ligger i hvordan jeg skal skjule brukernavn og passord? det er serdeles viktig at ikke brukeren har mulighet til å få tak i dette; hvordan gjøres dette vanligvis? Bruker nå MS SQL Server Express på testmaskinen (siden det følger med Visual Studio) men skal kjøre på MySQL etterhvert som systemet blir satt i drift. Lenke til kommentar
HDSoftware Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 er litt usikker på hva du mener. Du sier brukeren ikke må se brukernavn og passord? Jeg har da alltid brukt brukernavn og passord i Connection stringen og den ser jo ikke brukeren. Den ligger jo i programmet. Å skjule connection stringen er derimot værre tror jeg for så lenge du går over web så er vel ikke noe kryptert. VPN er vel i såfall løsningen vil jeg tro Lenke til kommentar
j000rn Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Connectionstring'en (og andre seksjoner i config filene dine) kan krypteres med ASPNET_REGIIS.EXE. Den ligger i %windir%\microsoft.net\framework\<version> katalogen din. Du har mulighet for å sette opp kryptering mellom SQL server og ASP.Net. Usikker på hvor bra dette er. Da vil både brukernavn/passord og data bli kryptert. Microsoft anbefaler å bruke domenekontoer istedenfor SQL logins for å koble til SQL Server. Men dette kan bli litt kronglete om du ikke har satt opp Active Directory allerede. En annen mulighet er å bruke IPSec eller VPN mellom webserver og database. Det er også viktig å ikke vise brukeren for detaljerte feilmeldinger når noe skjer feil. Eller glemme å skru av trace. Husk <customErrors> i web.config -- den skal ALDRI stå til "Off" Lenke til kommentar
GeirGrusom Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Dette er ikke noe web program, det er et helt vanlig exe, som folk skal ha på laptopene, som blir brukt til å hente inn opplysninger til rapporter som andre personer igjen skal lage. Jeg skal se på om de har mulighet for domene. Men når det gjelder passord nå, så ligger det fortsatt ukryptert på et tidspunkt i programmet, man kan jo bare debugge programmet for å finne connectionstringen, og dermed både brukernavn og passord til databasen, og får da mulighet til å slette og legge til nye records i tabellene utenfor progarmmet... veldig upopulært. Det er dette jeg vil gjøre noe med. Lenke til kommentar
j000rn Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Hva med å ikke gi brukerene tilgang til databasen. La brukeren koble seg til en webservice som kommuniserer med databasen. Evt. kan stored procedures også brukes. Lenke til kommentar
GeirGrusom Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Bruke en webservice som et proxy program? det kan jo fungere Lenke til kommentar
kaffenils Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Men du må jo fortsatt ha en eller annen form form autentisering mot webserveren som hoster web servicen. Eller skal det være en tjeneste som er åpne for alle? Lenke til kommentar
GeirGrusom Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Fortsatt autentisering, men da skjer det bare én gang. Nå må man logge seg på både SQL Serveren, og databasens "Users" tabell og "Session" tabell. Jeg legger til én ting til: Lagring av passord i databasen, nå bruker jeg MD5 hash, er det den beste måten, eller er det en bedre måte å gjøre det på? Lenke til kommentar
Manfred Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Databasepassordet legger man bare i servicen (eller sitt egenproduserte API). Det eneste man da trenger er å autentifisere hver enkeltbruker, og dette kan jo gjøres ved å sende over SHA1-krypterte passord, og sjekke mot tilsvarende på serversiden Lenke til kommentar
j000rn Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Ikke krypter passordet. Lag heller en hash av det. public static string PasswordHash(string password, string salt) { System.Security.Cryptography.SHA512Managed sha = new System.Security.Cryptography.SHA512Managed(); byte[] PassAndSalt = new byte[password.Length + salt.Length]; for(int i = 0; i < password.Length; i++) PassAndSalt[i] = (byte)password[i]; for(int i = 0; i < salt.Length; i++) PassAndSalt[i + password.Length] = (byte)salt[i]; byte[] hash = sha.ComputeHash(PassAndSalt); return Convert.ToBase64String(hash); } Lenke til kommentar
Manfred Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 ehm... en hash er en "en-veis-kryptering", og jeg sa SHA1, som strengt tatt er en hash Min funksjon er morsommere: public string SHA1(string data) { return System.BitConverter.ToString((new System.Security.Cryptography.SHA1CryptoServiceProvider()).ComputeHash((new System.Text.UnicodeEncoding()).GetBytes(data))).Replace("-", ""); } Lenke til kommentar
j000rn Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 (endret) ehm... en hash er en "en-veis-kryptering", og jeg sa SHA1, som strengt tatt er en hash 8557130[/snapback] Haha! Skulle bare se om du fulgte med.... Funksjonen din er jo ikke static engang jo, så man må initialisere objektet for å kjøre den.... Btw; du kan kutte den ned med 4 tegn ved å fjerne et par paranteser til Edit; Og enda 6 tegn ved å forandre funksjonsnavnet til 'S' og parameternavnet til 'd'. public static string S(string d){return System.BitConverter.ToString(new System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(new System.Text.UnicodeEncoding()).GetBytes(d)).Replace("-", "");} Endret 7. mai 2007 av jorn79 Lenke til kommentar
Manfred Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Hehehe... Du bare MÅ overgå? hehe Lenke til kommentar
GeirGrusom Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Vel her er den jeg brukte public static long GeneratePasswordHash(string passw) { System.Security.Cryptography.MD5 md5; md5 = System.Security.Cryptography.MD5.Create(); byte[] arr = System.Text.Encoding.Unicode.GetBytes(passw); return BitConverter.ToInt64(md5.ComputeHash(arr), 0); } Men da bytter jeg :S Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå