Hvordan laver jeg et sikkert login script

Tags:    php

<< < 12 > >>
Jeg har læst at det her script ikke er sikkert nok, hvordan forbedre jeg det:
her hentes dataet fra formen:
Fold kodeboks ind/udKode 


Her logges der ind
Fold kodeboks ind/udKode 


Er det script her sikkert nok, eller skal det være med krypteret password? hvis ja, hvordan laves det, en der vil hjælpe ..



14 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Det vil sige min sqlstreng skal se sådan her ud:
Fold kodeboks ind/udKode 


eller har jeg misforstået det?

Skal jeg ikke også sætte felterne i databasen til krypteren med md5 så?


Du har misforstået det.

For det første hedder det stripslashes()

For det andet skal du kryptere med md5() når du indsætter strengen i databasen. altså
$password = addslashes($password);
$password = md5($password);
mysql_query("insert into users(password) values(".$password.")");

Dette skal ikke copy-pastes, men skrives ind manuelt så du har en chance for at forstå hvad det er du laver. Derudover håber jeg også du kan se at der mangler $username. Hvilket du selvfølgelig selv skal sætte ind. Også med addslashes() .

Sidst men ikke mindst er din streng til at hente ud igen, helt forkert. Det er den data du skal hente, der skal stripslashes, og ikke hele sqlsætningen.

Fold kodeboks ind/udKode 




Ehh.. Så vidt jeg ved, sørger php5 selv for noget lignende add-, og stripslashes, så det er faktisk ikke nødvendigt mere.

Ellers er det selvfølgelig en god idé at kryptere passwords, man sætter ind i en database, men man skal være opmærksom på, at koden ikke umiddelbart kan dekrypteres igen!




Du sætter passwordet i cookie. Personligt er jeg ikke glad for at mit password står i klar tekst i en cookie. Så evt. brug md5.

Mhs. til det andet. Tag et kig på funktionen addslashes()



Grunden til at jeg sætter et password i en cookie er at man skal kunne logge automatisk ind, men hvordan skal jeg indvikle md5 ind i det.

Og hvad skal jeg bruge addslashes til?



$password = md5($password);

så simpelt er det at kryptere passwordet. Så skal du så huske også at kryptere passwordet på samme måde, inden du smider det ind i databasen. Så det bliver 2 krypterede strenge der bliver sammenlignet. Og så brugerne ikke risikerer at din database bliver cracket, og deres passwords stjålet derfra.

personligt dobbeltkrypterer jeg mine passwords med både sha1() og md5()

addslashes skal du bruge til at undgå sqlinjection angreb. Hvis ikke du bruger addslashes på de strenge der går ind i databasen, vil man kunne indtaste SQL-sætninger i felterne, som så vil blive eksekveret. Dette kan føre til nogle grimme angreb, hvor en cracker kan tage kontrollen 100% over et webhotel.

når du addslasher noget der skal indsættes i databasen, skal du selvfølgelig også huske at stripslashes() når du trækker det ud igen, for at fjerne skråstregerne fra slutbrugerens åsyn, da det ikke er særlig fikst at se på.



Det vil sige min sqlstreng skal se sådan her ud:
Fold kodeboks ind/udKode 


eller har jeg misforstået det?

Skal jeg ikke også sætte felterne i databasen til krypteren med md5 så?



nå, det vil sige man skal pakke password ind når man sætter det ind i databasen og så pakke det ud når det hentes, men hvordan pakker man så et script ud når det er md5() ??

Og hvis jeg bruger de funktioner er jeg beskytte mod hackere af mit system? hverfald bedre sikker end hvis jeg ikke gjorde noget? :P



Det er som udgangspunkt ikke muligt at pakke en md5'et streng ud igen. Når den først er krypteret, er der ingen vej tilbage.

Istedet for at pakke den ud igen, når du skal tjekke om den er == det indtastede, skal du simpelthen bare md5'e det indtastede også. Hvis de to md5 resultater er ens, så er de oprindelige passwords også ens.

Ved at bruge addslashes og stripslashes er du bedre sikret mod at crackere kommer ind i dit system. Og ved bruge md5 på dine brugeres passwords, giver du dine brugere den ekstra sikring, at selv hvis nogen cracker sig ind i dit system, vil de ikke kunne stjæle dine brugeres passwords, eftersom de som md5 er ubrugelige for folk der ikke kender det oprindelige password i forvejen.



Okay fint, nu tror jeg at jeg har fortået det ..

Så man skal ikke kryptere password feltet i mysql databasen på en eller anden måde, men bare smide dem ind med addslahes og md5() for andre ikke kan kende dem ..

Men skal password ik først laves til en md5() og så addslashes

$password = md5($password);
$password = addslashes($password);

sådan?

og så addslasher jeg også passwordset i cookien :)



Indlæg senest redigeret d. 25.02.2007 19:49 af Bruger #10622
rent faktisk er det slet ikke nødvendigt at addslashe passwordet. Da dette jo forpurres af md5. Det var bare for at vise dig hvordan addslashes() benyttes.

Det addslashes gør, er at sætte en \\ foran de steder hvor brugeren har fx indtastet " og lignende. stripslashes() fjerner så \\'erne igen.

når du bruger md5 på en streng, bliver alle tegnene jo til tal og bogstaver, på en fuldstændig ugennemskuelig måde. Dermed eksisterer nødvendigheden af addslashes ikke. Men på alle andre ting som brugere har mulighed for at indtaste til databasen, skal igennem en addslashes, for at sikre dig imod crackerangreb.



<< < 12 > >>
t