Probleem met inlog script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michael plus

Michael plus

26/05/2015 12:45:06
Quote Anchor link
hallo ik ben bezig met een simpel forum script maar ik heb een probleem met mijn login script, Het script logt je zoizo in, maakt niet uit welk wachtwoord je gebruikt.

Ik heb al geprobeerd met een strcmp() de inkomende wachtwoorden en de wachtwoorden uit de database the vergelijken maar dat maakt niks uit hij logt je gewoon in.

Is er iemand die een andere manier kan aanbevelen die werkt?

Als het nodig is zet ik mijn script hier neer.

Michael.
 
PHP hulp

PHP hulp

26/04/2024 22:48:01
 
- Ariën  -
Beheerder

- Ariën -

26/05/2015 12:45:59
Quote Anchor link
Laat je relevante code eens zien?
 
Michael plus

Michael plus

26/05/2015 12:48:44
Quote Anchor link
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<html>
    <body>
        <!--Main peice-->
        <div id="main">
        <?php
            session_start();
            include('include/configdb.php');
            if(isset($_POST['submit'])){
                $safepw = mysqli_real_escape_string($mysqli, $_POST['password']);
                $safeun = mysqli_real_escape_string($mysqli, $_POST['email']);
                $email = trim($_POST['email']);
                $password = crypt(trim($safepw), "mysecrethashkey");
                //$password = password_hash(trim($safepw), "mysecrethashkey");
                $query = "SELECT * FROM forumuser WHERE email='$safeun' AND password='$password' AND com_code IS NULL";
                $sql= "UPDATE forumuser SET is_online=1 WHERE email='$safeun' AND password='$password' ";
                $result = mysqli_query($mysqli,$query)or die(mysqli_error());
                $num_row = mysqli_num_rows($result);
                $row=mysqli_fetch_array($result);
                //$password_compare = ;
                if (strcmp($row['password'], $password) !== 0){
                    echo "Did u type ur password wrong?";
                }
else {
                    if( $num_row ==1 )
                    {

                       $_SESSION['user_name']=$row['username'];
                       if ($mysqli->query($sql) === TRUE){
                           echo 'nice';
                       }
else {
                           echo 'Not nice';
                       }

                       header("Location: index.php");
                       exit;
                    }
else {
                       echo 'false';
                    }
                }
            }

            ?>

            <div class="login_form">
                <form action="login.php" method="post" >
                    <p>
                    <label for="email">E-mail:</label><br>
                    <input name="email" type="text" id="email" size="30"/>
                    </p>
                    <p>
                    <label for="password">Password:</label><br>
                    <input name="password" type="password" id="password" size="30"/>
                    </p>
                    <p>
                    <input name="submit" type="submit" value="Login"/>
                    </p>
                    </form>
                    <strong>Copy &copy; Trojan_DC</strong>
            </div>
        </div>
    </body>
</html>

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 26/05/2015 12:50:49 door - Ariën -
 
Obelix Idefix

Obelix Idefix

26/05/2015 13:49:24
Quote Anchor link
Om te controleren of een formulier verzonden is wordt vaak
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == "POST")
gebruikt.

Waarom buiten de query mysqli_real_escape_string gebruiken?

Wat is het nut van regel 11?

Je vergelijking op regel 20 begrijp ik niet goed.
Je kunt toch controleren of er 1 resultaat is op basis van email / wachtwoord?
Als dat namelijk het geval is, is de combinatie juist. Anders onjuist.

Mag er voor een header een echo zitten? Is het sowieso zinvol (omdat bij een header een nieuwe pagina wordt aangeroepen?)
 
Thomas van den Heuvel

Thomas van den Heuvel

26/05/2015 14:01:12
Quote Anchor link
Ik zou zeggen: dump eens wat informatie naar je scherm, zodat je voor jezelf overzichtelijk maakt wat er gebeurt.
 
Michael plus

Michael plus

26/05/2015 16:44:01
Quote Anchor link
Thomas van den Heuvel op 26/05/2015 14:01:12:
Ik zou zeggen: dump eens wat informatie naar je scherm, zodat je voor jezelf overzichtelijk maakt wat er gebeurt.


Als ik de query door een print_r() haal dan zie ik bij bijde wachtwoorden die ik probeer de zelfde crypt staan, weet u hoe dit te fixen is?
 
Thomas van den Heuvel

Thomas van den Heuvel

26/05/2015 20:55:45
Quote Anchor link
De eerste user comment van strcmp() zegt:
Quote:
If you rely on strcmp for safe string comparisons, both parameters must be strings, the result is otherwise extremely unpredictable.

Ben je nagegaan dat beide elementen strings zijn?

Daarnaast: mzou je voor het vergelijken van crypts niet beter hash_equals() kunnen gebruiken (let op vereiste PHP versie)?

Zoals Obelix en Idefix al aangaf rammelt de logica van de code een beetje. Je controleert 2x het wachtwoord, die tweede keer is niet nodig omdat je dit al in de query doet? Even los van het feit dat je eerst escaped-voor-invoeging-in-de-query, en dan een crypt er overheen gooit :/. Het geven van hints wat er mis is met je logininformatie (ww verkeerd ingevoerd?) is ook not done.

Hoe dan ook, op een of andere manier wordt ten onrechte geconstateerd dat foutieve login-informatie klopt. Dit kan maar op een aantal (tweetal?) plaatsen zitten.

Sloop die header er tijdelijk uit, zodat er kan zien wat er tijdens het inloggen gebeurt, anders zijn je meldingen meteen weg...

Weet je ook zeker dat het misgaat, en blijft er geen sessie-data hangen van een vorige login of zoiets sufs? Hoe log je uit? Etc. Tijd om eens te gaan graven in je eigen code.
 



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.