Ik ben bezig met een systeem voor ledenadministratie.
Door dat ik bezig was met een log systeem erop ontdekte ik een fout in het systeem. Je kan met alle passworden in loggen zolang je de username maar wel goed hebt

Hier onder vind je het scriptje

<?php

if (strlen($_SESSION['rechten']) == 0) {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$sql = mysql_query("SELECT * FROM admin WHERE username LIKE '".$_POST['username']."'");
if (mysql_num_rows($sql) == 0) {
echo "Deze gebruikersnaam is niet gevonden in de database.";
mysql_query("INSERT INTO logs (actie, ip, datetime) VALUES ('Login Failed: Username not correct', '".$_SERVER['REMOTE_ADDR']."', NOW())");
} else {
$row = mysql_fetch_assoc($sql);
$md5_password = md5($_POST['password']);
if(!$md5_password == $row['password']){
echo "Controleer je wachtwoord";
mysql_query("INSERT INTO logs (actie, ip, datetime) VALUES ('Login Failed: Password not correct', '".$_SERVER['REMOTE_ADDR']."', NOW())");
} else {
$_SESSION['rechten'] = $row['rechten'];
header("location: ".$_SERVER['REQUEST_URI']);
}
}

?>

Kan iemand mij helpen?
<?php

if(!$md5_password == $row['password']){
?>
moet worden
<?php

if($md5_password != $row['password']){
?>
Die ! staat op de verkeerde plaats
Ik heb het veranderd

Kan nog steeds met alle passwords inloggen

<?php
if (strlen($_SESSION['rechten']) == 0) {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$sql = mysql_query("SELECT * FROM admin WHERE username LIKE '".$_POST['username']."'");
if (mysql_num_rows($sql) == 0) {
echo "Deze gebruikersnaam is niet gevonden in de database.";
mysql_query("INSERT INTO logs (actie, ip, datetime) VALUES ('Login Failed: Username not correct', '".$_SERVER['REMOTE_ADDR']."', NOW())");
} else {
$row = mysql_fetch_assoc($sql);
$md5_password = md5($_POST['password']);
if($md5_password != $row['password']){
echo "Controleer je wachtwoord";
mysql_query("INSERT INTO logs (actie, ip, datetime) VALUES ('Login Failed: Password not correct', '".$_SERVER['REMOTE_ADDR']."', NOW())");
} else {
$_SESSION['rechten'] = $row['rechten'];
header("location: ".$_SERVER['REQUEST_URI']);
}
}
?>

Dat heb ik nu

EDIT: Ik heb hem nog een keer opgeslagen en de pagina een aantal keer gerefresht
blijkt toch te werken

Bedankt voor je hulp
$sql = mysql_query("SELECT * FROM admin WHERE username LIKE '".$_POST['username']."'");

Wat doet die LIKE daar? En waarom geen enkele beveiliging op de POST-waarde? En waarom controleer je hier niet of het wachtwoord klopt? Jouw controles zorgen alleen maar voor veiligheidslekken...

<?php
$query = "
SELECT
hier_de_kolommen_die_je_nodig_hebt
FROM
admin
WHERE
username = '".mysql_real_escape_string($_POST['username'])."'
AND
password = '".md5($_POST['password'])."'";
$result = mysql_query($query);
// foutafhandeling toevoegen en $result gaan fetchen
?>
En ga nooit en te nimmer roepen dat een wachtwoord of username fout is, dat is geweldige informatie voor een hacker. Je zegt gewoon dat het inloggen is mislukt en daarmee klaar.

Ps. Vergeet niet om de juiste kolomnamen in de query te benoemen, een * is vragen om problemen. En het wachtwoord haal je NOOIT uit de database, zorgt weer voor veiligheidslekken.

Edit: ticvoudje
Hallo pgFrank

Hoe kan je een veilig registratieformulier maken
U heeft het over veiligheidslekken en de eenvoud voor een hacker.
Nu is dit iets wat we graag willen voorkomen dus vandaar mijn vraag


Arjan

Reageren