Avatar billede bryrup Nybegynder
09. januar 2006 - 18:15 Der er 17 kommentarer og
1 løsning

Sikker login - Hvad skal til ?

Hey alle...

Jeg har siddet og læst forskellige artikler og spm's over login scripts vha. MySql. Alle er simple og har ingen form for sikkerhed i sig. (inputs, passwrd) og ser tit der er mange som brokker sig over at der er mangel på det. Derfor vil jeg gerne høre jer, "De kloge folk" iblandt os hvad der skal til for at ens login form og script bliver sikkert "nok" at bruge.

Jeg tænker både på kryptering af password og sådan at man ikke kan taste et stykke query i (addslashes) eller deromkring.

**/ har også set denne :

mysql_escape_string()

/** Kan den bruges?

Hvad synes i alle, og må vi høre jeres erfaringer?


*Bryrup


OBS!! Alle med seriøse svar får point!!
Avatar billede udvikler Nybegynder
09. januar 2006 - 18:35 #1
Du kan bla.:

- Man kan md5 hashe (husk md5 er ikke kryptering)
- Har hørt at det er en god idé at LADE VÆR med at indsætte sine POST værdier direkte i en query
- gør brug af Register_Globals = Off
Avatar billede jackass- Nybegynder
09. januar 2006 - 18:53 #2
Jeg plejer at bruge sha1() kryptering til passwords.. synes det virker fint, har i hvert fald ikke haft brug for hårdere kryptering til nogen af mine projekter endnu.
Avatar billede webstuff Nybegynder
09. januar 2006 - 19:11 #3
det er en god idé at bruge addslashes, men det kræver at du tjekker om det bliver gjort i forvejen, ved at tjekke om magic qoutes er slået til :-)
Hvis den er, så lader du være med at bruge addslashes, og hvis den ikke er så gør du det.

Så er der ellers en masse funktioner som du kan køre på dit POST array.
mysql_real_escape_string();
strip_tags();
htmlentities();
htmlespecialchars();

osv. osv..

du skal også huske at bruge stripslashes når du trækker du :-)
Avatar billede rednex Nybegynder
09. januar 2006 - 19:15 #4
Det er en rigtig god idé at checke alt input som brugeren kan manipulere inden man forsøger at hælde det i databasen. Check at felterne er den type som de skal være (f.eks. ingen strenge i et id felt osv).

Kør alting gennem html_entities() for at uskadeliggøre HTML kode. mysql_real_escape_string() bør køres på alt hvad der skal i databasen.

Mht. kryptering, så forhindrer det kun at en bruger som får adgang til databasen kan aflure folks passwords. Det er stadig muligt at stjæle folks brugernavn/password ved session-hijacking eller sniffing.

Når du skal validere brugernavn og password, så sørg for at sammenligne resultatet fra databasen med hvad brugeren har indtastet. Ingen match - ingen adgang.
Avatar billede bryrup Nybegynder
09. januar 2006 - 19:15 #5
Webstuff = de fire funktioner du nævner hjælper de også på det problem at man kan lege med selve sql query'en fra textfieldet??

Tak for response... kan hjælpe en del.. lader lige stå åbent lidt endnu!!
Avatar billede rednex Nybegynder
09. januar 2006 - 19:26 #6
mysql_real_escape_string() sørger for at alle tegn som er 'specielle' for databasen bliver escapet. Det forhindrer de såkaldte sql-injection angreb. Den er klart at foretrække frem for addslashes().

html_entities() og htmlspecialchars() er to variationer over samme tema. Den første konverterer alle tegn som har en tilsvarende HTML entity, den anden konverterer kun udvalgte tegn. Jeg foretrækker den første.
Avatar billede bryrup Nybegynder
09. januar 2006 - 19:31 #7
okay mange tak.... så er jeg vidst alligevel godt udrustet til at lave et ordentligt login script...
Avatar billede rednex Nybegynder
09. januar 2006 - 19:43 #8
Mht. magic quotes, så kan det godt drille lidt. Når det er slået til, bliver alt input kørt gennem addslashes() inden scriptet starter. Jeg foretrækker at have det slået fra, da man så ved hvad man har med at gøre. Ellers kan der godt gå ged i det når du kører f.eks. mysql_real_escape_string(), da inputtet så bliver escapet 2 gange.

Du kan flikke et stykke kode sammen som sørger for at input bliver returneret "råt" selvom magic quotes er slået til. Sørg for at det bliver kørt for den kode som skal håndtere inputtet.

if (magic_quotes_gpc())
{
array_walk($_GET, 'stripslashes');
array_walk($_POST, 'stripslashes');
array_walk($_REQUEST, 'stripslashes');
array_walk($_COOKIES, 'stripslashes');
}
Avatar billede rednex Nybegynder
09. januar 2006 - 19:45 #9
hov, den skulle hedde get_magic_quotes_gpc() :oP
Avatar billede bryrup Nybegynder
09. januar 2006 - 20:01 #10
okay lækkert det prøver jeg lige...
Avatar billede bryrup Nybegynder
09. januar 2006 - 20:04 #11
Hvis jeg vil have sessions med er det så sådan ? :

array_walk($_SESSION, 'stripslashes');
Avatar billede rednex Nybegynder
09. januar 2006 - 20:06 #12
Ja, men så vidt jeg husker bliver $_SESSION ikke berørt af magic quotes. Session data ligger lokalt på serveren, og kan ikke manipuleres direkte af brugeren.
Avatar billede rednex Nybegynder
09. januar 2006 - 20:11 #13
Jeg tror lige jeg vil foreslå denne version fra PHP manualen i stedet. Den jeg postede tidligere tager nemlig ikke højde for arrays som input (f.eks. multiple select og radio buttons).

if (get_magic_quotes_gpc()) {
  function stripslashes_deep($value)
  {
      $value = is_array($value) ?
                  array_map('stripslashes_deep', $value) :
                  stripslashes($value);

      return $value;
  }

  $_POST = array_map('stripslashes_deep', $_POST);
  $_GET = array_map('stripslashes_deep', $_GET);
  $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}

Og prøv evt. at kigge lidt her: http://dk.php.net/manual/en/security.magicquotes.php
Avatar billede bryrup Nybegynder
10. januar 2006 - 09:30 #14
Så tror jeg at jeg er fuldt udrustet til at lave det nogenlunde sikkert... Tak for hjælpen... smid nogle svar så i kan få jeres veltjente point...
Avatar billede rednex Nybegynder
10. januar 2006 - 15:07 #15
Will do :o)

Og god fornøjelse med projektet :o)
Avatar billede bryrup Nybegynder
15. januar 2006 - 21:04 #16
Her er dine point, ingen andre ville have dem.:D

Der har opstået nogle små problemer med funktionen. Tror ikke det er selve funktionen for har også prøvet en anden inde pra php.net og den gør det samme...

Problem :
Fatal error: Cannot redeclare stripslashes_deep() (previously declared in /STORE/bryrup_net/public_html/NewsSys/config.php:11) in /STORE/bryrup_net/public_html/NewsSys/config.php on line 11


Line 11 =  function stripslashes_deep($value)
Avatar billede bryrup Nybegynder
15. januar 2006 - 21:04 #17
håber du kan hjælpe!!!
Avatar billede bryrup Nybegynder
15. januar 2006 - 21:13 #18
Nå er løst... en lille failure by me...!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester