Simpel Login Script geeft aan altijd user/pass verkeerd!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Chris Broekz

Chris Broekz

06/12/2010 21:00:59
Quote Anchor link
db structure:
Quote:
DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
`acct` int(10) unsigned NOT NULL auto_increment COMMENT 'Unique ID',
`login` varchar(32) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Login username',
`password` varchar(32) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Login password',
`encrypted_password` varchar(42) collate utf8_unicode_ci NOT NULL default '',
`gm` varchar(32) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Game permissions',
`banned` int(10) unsigned NOT NULL default '0',
`lastlogin` timestamp NOT NULL default '0000-00-00 00:00:00' COMMENT 'Last login timestamp',
`lastip` varchar(16) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Last remote address',
`email` varchar(64) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Contact e-mail address',
`flags` tinyint(3) unsigned NOT NULL default '0' COMMENT 'Client flags',
`forceLanguage` varchar(5) collate utf8_unicode_ci NOT NULL default 'enUS',
`muted` int(30) NOT NULL default '0',
`banreason` varchar(255) collate utf8_unicode_ci default NULL,
`votes` int(10) NOT NULL default '0',
`enabled` int(10) NOT NULL default '0',
PRIMARY KEY (`acct`),
UNIQUE KEY `a` (`login`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Account Information';


voorbeeld acc:
Quote:
INSERT INTO accounts VALUES ('1', 'test', 'test', '', 'az', '0', '2010-12-04 13:39:23', '127.0.0.1', '', '24', 'enUS', '0', null, '0', '1');


Ik heb dit script zelf een beetje verandert van een ander script zo heb ik username verandert naar login omdat dit bij mijn oude db structure hoorde. Maar wat ik ook invul hij blijft zeggen dat de username en password verkeerd zijn.

Ik weet zeker dat ik een geldig account naam en password invoer en ik weet ook zeker dat ik in de conn.php file de juiste gevens heb ingevoerd voor mijn MySQL database. Hij geeft voor de rest geen MySQL errors of andere errors.

main code:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
session_start();

include 'conn.php';

    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {


        $login_user = $Mysqli->real_escape_string($_POST['username']);
        $login_pass = $Mysqli->real_escape_string(sha1($_POST['password']));
        $user_ip = $_SERVER['REMOTE_ADDR'];
        srand ((double) microtime( )*1000000);
        $session_id = rand(1000,1000000);
 
        $q1 = "
        SELECT
            acct,
            login,
            banned
        FROM
            accounts
        WHERE
            login = '"
.$login_user."'  
        AND
            password = '"
.$login_pass."'
        "
;

            if(!$r1 = $Mysqli->query($q1))
        {

        
            echo 'Er is een fout opgetreden!. '. $Mysqli->error;
        
        }

                                        
                                
                elseif($Mysqli->affected_rows == 1)
                {

    

                                while ($row = $r1->fetch_assoc ())
                                {

                                
                                        $_SESSION["login"] = $row['login'];
                                        $_SESSION['user_id'] = $row['id'];  
                                        $_SESSION['user_ip'] = $user_ip;
                                        $_SESSION['session_id'] = $session_id;
                                              
                                    if ($row['banned'] == 1)
                                    {

                                        echo 'Youre banned you cannot login!';
                                    }

                                        else
                                        {
                                            //Inloggen gelukt!!
                                            header("location: " . 'index.php?msg=succes');
                                        }


                                
    
    
                    $q2 = "
                    INSERT INTO
                        sessions
                    (
                        user_id,
                        session_id,
                        user_ip
                    )
                    VALUES
                    (
                        '"
.$row['id']."',
                        '"
.$session_id."',
                        '"
.$user_ip."'
                    )
                    "
;
                                }


                                    if (!$Mysqli->query ($q2) )
                                    {

                                    
                                        echo 'Something went wrong!'. $Mysqli->error;
                                    
                                    }
                                



                }

                    else
                    {  
                        echo 'Username or Password is invalid! Please try again.';
                    }  
          
    }

        else
        {
            ?>

                <html>
                <head>
                <title>Login</title>
                </head>
                <body>
                <h2>Login</h2>
                
                <?php
                    if(isset($_GET['error']))
                    {

                        if($_GET['error'] == 'sess')
                        {

                            echo 'This session is invalid! Please try again.<p>';
                        }
                    }

                ?>

                    <form method='post'>  
                                <table>  
                                    <tr>  
                                        <td>Username:</td>  
                                        <td><input type='text' name='username'></td>  
                                    </tr>  
                                    <tr>  
                                        <td>Password:</td>  
                                        <td><input type='password' name='password'></td>  
                                    </tr>  
                                    <tr>  
                                        <td><input type='submit' name='submit' value='Login'></td>  
                                    </tr>  
                                </table>  
                    </form>
                      
                </body>
                </html>          
        <?php
        }  
        ?>
Gewijzigd op 06/12/2010 21:04:13 door Chris Broekz
 
PHP hulp

PHP hulp

29/03/2024 08:25:21
 
Jasper DS

Jasper DS

06/12/2010 21:03:46
Quote Anchor link
- relevante code?
- code tags
- haal die enters weg

leest gemakkelijker => kunnen we beter helpen
Gewijzigd op 06/12/2010 21:05:05 door Jasper DS
 
Chris Broekz

Chris Broekz

06/12/2010 21:04:41
Quote Anchor link
Sorry ik had het niet goed gepost heb het even bewerkt.

PHP jasper op 06/12/2010 21:03:46:
relevante code?
 
Jasper DS

Jasper DS

06/12/2010 21:06:46
Quote Anchor link
dus je geeft de juiste gegevens in maar het systeem zegt dat je de verkeerde invult?
 
- Ariën  -
Beheerder

- Ariën -

06/12/2010 21:07:16
Quote Anchor link
je, de code die relevant is.

Dat zijn dus geen 134 regels...
 
Yea Rupie

Yea Rupie

06/12/2010 21:08:53
Quote Anchor link
Ik ben niet echt thuis in mysqli, maar volgens mij mist hier iets: $Mysqli->affected_rows
Het lijkt me dat je ook aan moet geven welke query het betreft.
Gewijzigd op 06/12/2010 21:09:13 door Yea Rupie
 
Chris Broekz

Chris Broekz

06/12/2010 21:10:40
Quote Anchor link
Ik zou best willen aangeven aan welke query het ligt, maar dat zal ik zelf ook niet weten. Maar ik denk dat het hiermee te maken heeft:

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
                                
                elseif($Mysqli->affected_rows == 1)
                {
    

                                while ($row = $r1->fetch_assoc ())
                                {
                                
                                        $_SESSION["login"] = $row['login'];
                                        $_SESSION['user_id'] = $row['id'];  
                                        $_SESSION['user_ip'] = $user_ip;
                                        $_SESSION['session_id'] = $session_id;
                                              
                                    if ($row['banned'] == 1)
                                    {
                                        echo 'Youre banned you cannot login!';
                                    }
                                        else
                                        {
                                            //Inloggen gelukt!!
                                            header("location: " . 'index.php?msg=succes');
                                        }

                                
    
    
                    $q2 = "
                    INSERT INTO
                        sessions
                    (
                        user_id,
                        session_id,
                        user_ip
                    )
                    VALUES
                    (
                        '".$row['id']."',
                        '".$session_id."',
                        '".$user_ip."'
                    )
                    ";
                                }

                                    if (!$Mysqli->query ($q2) )
                                    {
                                    
                                        echo 'Something went wrong!'. $Mysqli->error;
                                    
                                    }
 
Pieter van Linschoten

Pieter van Linschoten

06/12/2010 21:10:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
sha1($_POST['password']);
?>

Hij vergelijkt de sha1 van je ingevoerde wachtwoord, met het wachtwoord in de database.

Je moet in je database niet een veld toevoegen met als wachtwoord test, maar de sha1 van test: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

VB account zou dan moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO accounts VALUES ('1', 'test', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', '', 'az', '0', '2010-12-04 13:39:23', '127.0.0.1', '', '24', 'enUS', '0', null, '0', '1');
Gewijzigd op 06/12/2010 21:12:30 door Pieter van Linschoten
 
Jasper DS

Jasper DS

06/12/2010 21:11:04
Quote Anchor link
maak op lijn 36 van elseif if sorry

->
pieter heeft het juist.
Gewijzigd op 06/12/2010 21:12:47 door Jasper DS
 
Chris Broekz

Chris Broekz

06/12/2010 21:13:17
Quote Anchor link
Ik laat mensen via een ander script registreren en in de het veld Password krijg ik dan bijvoorbeeld 'Test' en niet a94a8fe5ccb19ba61c4c0873d391e987982fbbd3. Dus hoe kan ik dit veranderen?

Pieter van Linschoten op 06/12/2010 21:10:48:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
sha1($_POST['password']);
?>

Hij vergelijkt de sha1 van je ingevoerde wachtwoord, met het wachtwoord in de database.

Je moet in je database niet een veld toevoegen met als wachtwoord test, maar de sha1 van test: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

VB account zou dan moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO accounts VALUES ('1', 'test', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', '', 'az', '0', '2010-12-04 13:39:23', '127.0.0.1', '', '24', 'enUS', '0', null, '0', '1');
 
Jasper DS

Jasper DS

06/12/2010 21:14:34
Quote Anchor link
voor je je wachtwoord naar de db scrijft er sha1() over gooien
 
Chris Broekz

Chris Broekz

06/12/2010 21:14:52
Quote Anchor link
Een encrypted_password? Die kan ik wel toevoegen, is dit wat je bedoelt?

Want dat zou betekenen dat ik inplaats van password naar encryped_password moet gaan.
 
Pieter van Linschoten

Pieter van Linschoten

06/12/2010 21:15:26
Quote Anchor link
Regel 10
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
     $login_pass
= $Mysqli->real_escape_string(sha1($_POST['password']));
?>

vervangen door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
     $login_pass
= $Mysqli->real_escape_string($_POST['password']);

?>


Veilig is het echter allerminst. Beter is om ook bij de registratie procedure gebruik te maken van sha1.
 
Chris Broekz

Chris Broekz

06/12/2010 21:16:05
Quote Anchor link
bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO accounts VALUES ('15', 'sadddss', 'test5', 'b60732e6801c794c37d16eed37565e9cd3f86c86', '0', '0', '0000-00-00 00:00:00', '127.0.0.1', '[email protected]', '24', 'enUS', '0', null, '0', '0');
 
Jasper DS

Jasper DS

06/12/2010 21:17:34
Quote Anchor link
je vergelijkt je passwoord hier met sha1
$login_pass = $Mysqli->real_escape_string(sha1($_POST['password']));

maar je passwoord staat niet met sha1() in de db.
Dus moet je zorgen als mensen registreren dat hun wachtwoord met sha1() in de db terecht komt.

dus

insert into blablabla values('sha1($wachtwoord)') ...
 
Chris Broekz

Chris Broekz

06/12/2010 21:18:35
Quote Anchor link
Mijn registratie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
    $hash = sha1(sprintf("%s:%s", strtoupper($login), strtoupper($pass)));
    $acc_query = "INSERT INTO `accounts` (`login`, `password`, `encrypted_password`, `lastip`, `email`, `flags`, `gm`, `banned`) VALUES ('$login', '$pass', '$hash', '$ip', '$email', '$expansion', '0', '0');";
    $acc_query = @mysql_query($acc_query);


dit betekent dat ik al sha1 gebruik alleen is dat niet bij de collum 'passwords' maar bij encrypted_password. Dit zou betekenen als ik passwords vervang door Encrypted_passwords dat als iemand dan zijn password invoert dat hij dan succesvol inlogged?
 
Jasper DS

Jasper DS

06/12/2010 21:20:01
Quote Anchor link
kan je ook doen maar waarom?
 
Chris Broekz

Chris Broekz

06/12/2010 21:20:39
Quote Anchor link
Lijkt mij de beste oplossing, toch?
Als ik mijn veiligheid wil behouden.

PHP jasper op 06/12/2010 21:20:01:
kan je ook doen maar waarom?
 
Jasper DS

Jasper DS

06/12/2010 21:22:16
Quote Anchor link
kan je het evengoed zonder doen. Zorg gewoon dat je 1 kolom met het paswoord hebt en gooi daar die sha1() over.
 
- SanThe -

- SanThe -

06/12/2010 21:24:10
Quote Anchor link
Dus je hebt mooie veilige passwords, maar mocht het iemand lukken om in je database te komen (sql-injection ofzo) dan liggen de passwords gewoon op straat. Beetje onlogisch en niet echt veilig.
 
Jasper DS

Jasper DS

06/12/2010 21:24:48
Quote Anchor link
- SanThe - op 06/12/2010 21:24:10:
Dus je hebt mooie veilige passwords, maar mocht het iemand lukken om in je database te komen (sql-injection ofzo) dan liggen de passwords gewoon op straat. Beetje onlogisch en niet echt veilig.


dat bedoelde ik ook, jij zegt het gewoon beter :)
 

Pagina: 1 2 volgende »



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.