Gå til innhold

Sikkerhet rundt SQL Server passord


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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

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

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
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.... :cool:

Funksjonen din er jo ikke static engang jo, så man må initialisere objektet for å kjøre den.... :thumbdown:

 

Btw; du kan kutte den ned med 4 tegn ved å fjerne et par paranteser til :w00t:

Edit; Og enda 6 tegn ved å forandre funksjonsnavnet til 'S' og parameternavnet til 'd'. :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 av jorn79
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...