Hij pakt alle passwoorden die je invoert

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Remco van Lent

Remco van Lent

11/02/2009 18:49:00
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']);
            }
        }


?>


Kan iemand mij helpen?
 
PHP hulp

PHP hulp

25/12/2024 14:54:18
 
Erwin Geen

Erwin Geen

11/02/2009 18:53:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

            if(!$md5_password == $row['password']){
?>

moet worden
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

            if($md5_password != $row['password']){
?>

Die ! staat op de verkeerde plaats
 
Remco van Lent

Remco van Lent

11/02/2009 18:56:00
Quote Anchor link
Ik heb het veranderd

Kan nog steeds met alle passwords inloggen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']);
            }
        }

?>


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
 
Frank -

Frank -

11/02/2009 19:13:00
Quote Anchor link
$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...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>

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 -
 
Arjan jansen

arjan jansen

11/02/2009 22:39:00
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.