I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det mest normale er at lave en hash - ex. md5 - på passwordet. En hash funktioner er envejs, dvs. man kan "aldrig" finde frem til klartekst kodeordet. Du kontrollerer et login, ved at tage hash værdien af det indtastede og sammenligne det med det hashede kodeord i databasen.
et check i databsen for brugernavn og password (hashed med md5) kunne se sådan ud:
$query = mysql_query("SELECT brugernavn, password FROM login WHERE brugernavn = '".$_POST[brugernavn]."' AND password = md5('".$_POST[password]."')") or die(mysql_error());
læge mærke til md5('".$_POST[password]."') <- det indtastede password hashes og sammenlignes med det hashede password i databasen
Passwordet er "klartekst" men som davidskp's løsning foreskriver gemmes den hashede version i mysql databasen. Det er den hashede version af passwordet du sammenligner med det hashede password i databasen.
Jeg må indrømme. at jeg ikke er så meget inde i det tekninske omkring fordele og ulemper, men der er jo ingen grund til, at dekryptere for, at sammenligne. Så er md5 kryptering jo også let at anvende. Hvis du er meget meget fokuseret på sikkerheden kan du jo:
kan godt se fordelen ved at kryptere kodeord. og det tager jo ikke specielt længere tid... men hvorfor ikke bare bruge base64_encode, i stedet for md5, syntes det er smartere når man tænker på at en bruger muligvis kan komme til at glemme sin kode og gerne ville have den sendte på email...
nå fuck det.. tror jeg sætter mig ned og læser lidt om de 2 muligheder...
Sikkerhedsmæssigt er det ikke en god idé. Hvis en cracker kompromitterer systemet, vil han have adgang til alle brugeres passwords - Hvis de er krypteret kan han ikke gøre så meget. Så jeg er pro-hashing og anti-klartekst ;)
coderdk -> Okay det kan man sige at være en rimlig god forklaring. nu kan jeg se fordelen med md5 i stedet for base64_encode.
Kenner -> Undskylder at jeg sådan har brudt ind i dit spørgsmål, men syntes netop dette emne var interesant at vide lidt om. og syntes det var dumt at have 2 spg åbne for at indhente lidt informationer.
Det er også meget almindeligt at bruge en hemmelig nøgle, når hashen beregnes.
$hash = md5($password."noget hemmeligt");
Hvis en ubuden gæst får fat i databasen, kan han ikke bare gå i gang med at bruteforce passwords (svage password bliver også stærkere). Han skal også have kendskab til den hemmelige nøgle.
I beta versionen af den nye Eksperten var der et stort sikkerhedshul, som gjorde man kunne få udlæst md5 hashen af brugernes password. Disse kunne så umiddelbart bruteforces. Det kunne være besværliggjort med en hemmelig nøgle..
Se min kommentar fra 07/02-2005 17:34:41 Eller gør som gf skriver, ændr det for dem og send det til dem.
Synes godt om
Slettet bruger
09. februar 2005 - 00:55#22
Bare for at gøre det helt klart: Hvis man benytter md5 er der ingen måde at få det egentlige kodeord frem igen. Det kan ikke lade sig gøre - og det er netop det, der er fidusen ved det. Man kan altså ikke sende en glemsom brugers kodeord. I stedet har man f.eks. en funktion, der kan generere et ny kodeord og sende det til brugeren.
Det betyder naturligvis ikke, at man ikke kan bruge bruteforce-metoden (som gammelhat omtalte) til at finde en streng, der giver samme md5sum, som koden. En md5sum er på 128 bit, så der er trods alt "kun" 2^128 forskellige mulige, så hvis man afprøver nok forskellige strenge, skal man nok finde en, som giver samme md5sum. Det er sandsynligvis ikke den ægte kode, men hvis bare den virker lige så godt, kan det jo også være ligegyldigt.
Da JavaScript også har md5 indbygget, kan man bruge det til at undgå at sende det ukrypterede kodeord ved indlogning. Metoden er egentlig ganske simpel:
Serversiden laver et salt, som sættes som et skjult felt i login-formularen. Dette salt bør være unikt. Det gemmes i en session-variabel.
Formularen laves, sådan at når den bliver sendt, bliver der først kørt et javascript, som tager md5(md5(kodeord) + salt) og sender dette i stedet for klartekstkodeordet.
Når formularen modtages af serveren, sammenlignes med databasen i stil med if($_POST['kodeord']==md5($row['kodeord'] . $_SESSION['salt']))
Bemærk, at denne metode gør login en lille smule mere sikkert, men hvis man ønsker rigtig sikkerhed, bør man bruge en krypteret forbindelse (SSL). Det eneste, denne metode beskytter mod er opsnapning af kodeordet.
Jeg kunne godt tæke mig et brutoforce script, så jeg selv kan tjekke sikkerheden på mine sider..
Hvad er fremgangsmåden, og er der et script man benytter?
Synes godt om
Slettet bruger
26. februar 2005 - 01:07#24
Hvis dine sider er lavet ordentligt (så uvedkommende ikke kan få adgang til md5-koderne i databasen), så kan man ikke afprøve sikkerheden i dine sider med bruteforce-metoden. Man vil højst kunne finde usmarte passwords.
Metoden er ganske simpel, og det er også derfor, den kaldes brute force, som løseligt oversat betyder råstyrke. Det handler altså om at bruge rå regnekraft og repetition og ikke nogen kompliceret algoritme.
Hvis du for eksempel har en kuffert med kodelås, som har tre tal, så ville bruteforce-metoden til at komme ind være at starte med 000, derefter 001 osv. indtil 999. På et eller andet tidspunkt vil jeg have fundet den rette kode.
Nu er PHP ikke det smarteste sprog at bruge til at forsøge et bruteforceangreb på en md5-sum, men her er et lille eksempel:
<?php
$hemmelig="Her er en kode"; $krypteret=md5($hemmelig);
function bruteforce($streng=''){ global $testtegn; global $krypteret; $match=FALSE; for($i=0;$i<=strlen($testtegn)||!$match;$i++){ $teststreng=$streng . substr($testtegn,$i,1); $match= ( md5($teststreng) == $krypteret?$teststreng:FALSE); if(strlen($teststreng)<=10 && $match!==FALSE){ $match=bruteforce($teststreng); } } return $match; }
$resultat=bruteforce(); if($resultat!==FALSE){ echo $resultat . ' kan bruges som kode."; } ?>
Bemærk, at koden nok ikke vil kunne køre på webhoteller, og hvis du vil køre den på en egen server, skal du nok pille lidt ved indstillingerne først. Det er nemlig en krævende algoritme. Derudover forsøger den kun op til 10 tegn for ikke at kræve alt for meget.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.