04. november 2006 - 16:25
Der er
7 kommentarer og 1 løsning
Sikkerhed i login-script
Jeg har lavet et script, og vil gerne høre, hvor sikkert det er. Her er mit script: <?php include('header.php'); if($_GET['action'] == 'send') { $brugernavn = addslashes($_POST['brugernavn']); $result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '{$brugernavn}'"); $row = mysql_fetch_array($result); $kodeord = md5($_POST['kodeord']); if($brugernavn == '' || $_POST['kodeord'] == '') { echo "Udfyld venligst begge felter"; } else { if($kodeord == $row['kodeord']) { $_SESSION['ok'] = "ok"; $_SESSION['brugernavn'] = $brugernavn; if($row['klub'] == '1') { $startresult = mysql_query("SELECT * FROM klubber WHERE ejer = '{$row['id']}'"); $startrow = mysql_fetch_array($startresult); echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=klub.php?klub_id=" . $startrow['id'] . "\">"; } else { echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=opret.php\">"; } } else { echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=logind.php\">"; } } } else { ?> <form method="post" action="?action=send"> <table style="border-collapse: collapse;"> <tr> <td style="padding: 0px; width: 150px;"> Brugernavn </td> <td style="padding: 0px; width: 150px;"> <input type="text" class="post" name="brugernavn" style="width: 150px;"> </td> </tr> <tr> <td style="padding: 0px; width: 150px;"> Kodeord </td> <td style="padding: 0px; width: 150px;"> <input type="password" class="post" name="kodeord" style="width: 150px;"> </td> </tr> <tr> <td colspan="2" style="padding: 0px; width: 300px;"> <input type="submit" class="post" name="submit" value="Send"> </td> </tr> </table> </form> <?php } include('footer.php'); ?>
Annonceindlæg fra Barco
04. november 2006 - 16:38
#1
Har selv læst en del om sikkerhed og ved derfor en del om det, jeg kunne kun finde 1 fejl i din kode, den var i en MySQL sætning. Du må _ALDRIG_ indsætte en POST eller GET værdi direkte ind i en MySQL kode, du skal først lave den om til en variabel og tjekke den. Brug istedet dette: <?php include('header.php'); if($_GET['action'] == 'send') { $brugernavn = addslashes($_POST['brugernavn']); $result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '{$brugernavn}'"); $row = mysql_fetch_array($result); $kodeord = md5($_POST['kodeord']); if($brugernavn == '' || $_POST['kodeord'] == '') { echo "Udfyld venligst begge felter"; } else { if($kodeord == $row['kodeord']) { $_SESSION['ok'] = "ok"; $_SESSION['brugernavn'] = $brugernavn; if($row['klub'] == '1') { $idnummer = mysql_real_escape_string($row['id']); $startresult = mysql_query("SELECT * FROM klubber WHERE ejer = '{$idnummer}'"); $startrow = mysql_fetch_array($startresult); echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=klub.php?klub_id=" . $startrow['id'] . "\">"; } else { echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=opret.php\">"; } } else { echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=logind.php\">"; } } } else { ?> <form method="post" action="?action=send"> <table style="border-collapse: collapse;"> <tr> <td style="padding: 0px; width: 150px;"> Brugernavn </td> <td style="padding: 0px; width: 150px;"> <input type="text" class="post" name="brugernavn" style="width: 150px;"> </td> </tr> <tr> <td style="padding: 0px; width: 150px;"> Kodeord </td> <td style="padding: 0px; width: 150px;"> <input type="password" class="post" name="kodeord" style="width: 150px;"> </td> </tr> <tr> <td colspan="2" style="padding: 0px; width: 300px;"> <input type="submit" class="post" name="submit" value="Send"> </td> </tr> </table> </form> <?php } include('footer.php'); ?>
04. november 2006 - 16:41
#3
I du kan også bruge denne til at tjekke alle dine variabler der indeholder et id: if (!preg_match("/[0-9]/", $var)) { //det indeholder IKKE tal }else{ //det indeholder tal } den fungere på den måde at den tjekker om variablen virkelig indeholder et tal eller bogstaver.
04. november 2006 - 16:44
#4
Også kunne du vel gøre sådan at man blev sendt til en ny side hvor php koden blev afviklet, jeg kan ikke helt huske grunden til det, men det er vidst mere sikkert :-)