kan bevise det ved at ændre filerne, og dermed hjemmesiden. :D
Men måden jeg tjekker på, er at jeg laver et database-opkald, hvor jeg vælger den række hvor $_SESSION['jgegbrugernavn'], er, jeg har ved login oprettet flere sessions med nogle af brugerens data. F.eks email, status (altså om han er admin osv), jeg tjekker så alle dem op mod dataene fra databasen, stemmer de ikke overens, får brugeren en logind fejl.
if ($_SESSION['dfgh_brugernavn'] != $dgjjg_bruger or $_SESSION['dfgh_brugeremail'] != $dgjjg_email or $_SESSION['dfgh_brugerstatus'] != $dgjjg_status) { ikke_logget_ind(); }
Men jeg må indrømme, at jeg ikke kan skrive noget i inputfelterne så jeg ville kunne komme ind uden korrekt brugernavn/password. Men det er i hvert fald ændret.
Imidlertid er det ikke nok at sikre loginkoden. ALLE steder hvor der kommer bruger input ind i systemet skal det sikres. Det gælder f.eks. også der hvor at nye brugere opretter sig.
$mysql = @mysql_query("SELECT * FROM Brugere WHERE Brugernavn='" . $_SESSION['dfgh_brugernavn'] . "'");
problematisk, for du her en mulig SQL-injection, når du putter en værdi ind i en SQL-sætning uden at gøre noget ved den. Den kan fx indeholde '-tegn, og så kan man snyde dig.
PHP har fra gammel tid, i et meget misforstået forsøg på at være venlig, lavet en automatisk "addslashes" på input fra brugere. Det er hul i hovedet, for det er ikke i GUI-delen, den slags skal ske, men i SQL-delen. PHP5s nye mysqli-funktioner hjælper lidt på det, og egentlig er det dem, der skal bruges (rigtigt!!) nu om dage.
Som jeg skrev den 19/04-2008 12:13:00 så kan jeg ikke finde ud af at 'snyde' koden, men jeg har _alligevel_ ændret koden.
> Imidlertid er det ikke nok at sikre loginkoden. ALLE steder hvor der kommer bruger input ind i systemet skal det sikres. Det gælder f.eks. også der hvor at nye brugere opretter sig.
Havde jeg gættet, men det bliver ikke lige nu, men skal det gøres et sted, skal det for det meste gøres alle steder. :D
Erikjacobsen: Du vil vel også bruge mysql_rael_escape_string?
Jeg har ændret denne linje:
$mysql = @mysql_query("SELECT * FROM Brugere WHERE Brugernavn='" . $_SESSION['dfgh_brugernavn'] . "'");
Til dette:
$query = sprintf("SELECT * FROM Brugere WHERE Brugernavn='%s'", mysql_real_escape_string($_POST['login_bruger'])) or die(); $mysql = mysql_query($query);
"hvilken en"? Jeg tror ikke lige du har forstået: det er en anden måde at gøre det på. Start i menuen ude til venstre med "Introduction", og arbejd dig nedefter. Der kommer eksempler osv.
Der er intet vundet ved mysqli, hvis man ikke gør det rigtigt. http://php.net/ fortæller meget, og ellers har du sikkert en ved i Google ;)
"Nix, prøv så kan du se hvad jeg mener" >> Nej, jeg kan ikke se, hvad du mener. Jeg bliver sendt til mysqli's hovedside, når jeg søger =)
"Men hvad er forskellen på ..." >> Forskellen er, at du ikke behøver at bruge "mysqli_real_escape_string" for at sikre dig mod SQL-injection. Det vil du finde ud af, hvis du læser om mysqli ;o)
> (men det tager lidt mere end 5 sekunder at forklare - derfor må du læse dig til det selv, hehe)
Ja der er temlig meget at gå i krig med!
Mysqli er altså meget mere sikkert (kan også se at man kan lave en ssl krypteret forbindelse) end mysql. Men da der er så pokkers meget at læse, tror jeg bare jeg vil nøjes med at bruge mysql_real_escape_string, hvis det altså er nogenlunde lige så sikkert.
"hvis det altså er nogenlunde lige så sikkert." >> Det er det ikke.
I betragtning af, hvormeget du burde have læst for at nå til at lave sikre serverløsninger, er den smule læsning for intet at regne. Webkodning er et fag ;o)
Det er der ingen, der kan fortælle dig. Sikkerhed er ikke en absolut størrelse, men afhænger af en masse parametre.
Men jeg kan fortælle dig, hvad der er rimligt sikkert. Læg hele din website på en CD, og på put den i en bankboks. Alt andet du foretager giver nok en større anvendelighed, men også en mindre sikkerhed. Spørgsmålet er kun hvad du vil have.
Det vil ikke forhindre noget. Hvis du sørger for at SQL-injection ikke kan forekomme, så har du lukket et af et pænt antal "huller", som en "hacker" kan komme ind af. Sikkerhed er mere end det. Men mon der er nogen, der gider angribe dit system? ;)
Kan man bygge biler til salg, hvis man ikke ved, hvordan man holder dem sikkert på vejen? Kan man skrive websites til kunder, hvis man ikke kender til alm. sikkerhedsregler for webapplikationer? Der er så meget, ældre mænd ikke forstår ;o)
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.