Hij pakt alle passwoorden die je invoert
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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']);
}
}
?>
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?
moet worden
Die ! staat op de verkeerde plaats
Kan nog steeds met alle passwords inloggen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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']);
}
}
?>
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
Gewijzigd op 01/01/1970 01:00:00 door Remco van Lent
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...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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
?>
$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
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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