Loginscript werkt niet
Hallo,
Ik ben bezig met een PHP/SQL login script. Nu heb ik mijn script die checkt of wachtwoord en login naam in de database staan. maar als ik het goede wachtwoord en loginnaam invoer krijg ik toch de error. Wie kan me helpen?
Ik ben bezig met een PHP/SQL login script. Nu heb ik mijn script die checkt of wachtwoord en login naam in de database staan. maar als ik het goede wachtwoord en loginnaam invoer krijg ik toch de error. Wie kan me helpen?
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
require("config.php");
if(!$_GET['act']){
echo("<form method='POST' action='$PHP_SELF?act=login'>
Username: <input type='text' name='username' /><br />
Password: <input type='password' name='password' /><br />
<input type='submit' value='Login!' />
</form");
} if($_GET['act'] == "login"){
$username = ($_POST['username']);
$password = ($_POST['password']);
$check = 'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
if(mysql_num_rows($res) == 1){
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}if(mysql_num_rows($res) <= 0){
echo("The username/password was not found. $username $password");
}}
?>
require("config.php");
if(!$_GET['act']){
echo("<form method='POST' action='$PHP_SELF?act=login'>
Username: <input type='text' name='username' /><br />
Password: <input type='password' name='password' /><br />
<input type='submit' value='Login!' />
</form");
} if($_GET['act'] == "login"){
$username = ($_POST['username']);
$password = ($_POST['password']);
$check = 'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
if(mysql_num_rows($res) == 1){
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}if(mysql_num_rows($res) <= 0){
echo("The username/password was not found. $username $password");
}}
?>
Gewijzigd op 07/02/2012 21:10:32 door Matthijs Vos
Gesponsorde koppelingen:
Een paar dingen:
- niet controleren met !$_GET, maar met isset($_GET)
- geen foutafhandeling
- geen variabelen kopieren op regel 12 en 13
- niet selecteren met *
- sql injectie gevoelig
- niet controleren met !$_GET, maar met isset($_GET)
- geen foutafhandeling
- geen variabelen kopieren op regel 12 en 13
- niet selecteren met *
- sql injectie gevoelig
als je nou doet
dus als je NIKS vind krijg je error, en anders ga je verder.. nu chek je het dubbelop en daar gaat ergens fout ( volgens mij )
nu doe je de hele tijd een IF zonder foutafhandeling dus je weet ook niet waarom het komt je doet gewoon alless zonder antwoord te krijgen,
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if (mysql_num_rows($res) == 0 ) {
echo "the username/password not found";
}
else {
/rest van code
}
?>
if (mysql_num_rows($res) == 0 ) {
echo "the username/password not found";
}
else {
/rest van code
}
?>
dus als je NIKS vind krijg je error, en anders ga je verder.. nu chek je het dubbelop en daar gaat ergens fout ( volgens mij )
nu doe je de hele tijd een IF zonder foutafhandeling dus je weet ook niet waarom het komt je doet gewoon alless zonder antwoord te krijgen,
- niet action=$PHP_SELF , maar geef de url op
- maak van de if op regel 22 een else
- maak van de if op regel 22 een else
Heey Jeroen,
Bedankt voor je reactie. Heb de isset aangepast: if (isset($_GET['act'])) {
Wat bedoel je met geen foutafhandeling en geen variabele kopieren??
Waar moet ik dan mee selecteren? username, password??
Wat betreft sql injectie dat klopt, maar wil hem eerst draaiend hebben en dan die beveiliging er op.
Matthijs
Bedankt voor je reactie. Heb de isset aangepast: if (isset($_GET['act'])) {
Wat bedoel je met geen foutafhandeling en geen variabele kopieren??
Waar moet ik dan mee selecteren? username, password??
Wat betreft sql injectie dat klopt, maar wil hem eerst draaiend hebben en dan die beveiliging er op.
Matthijs
Nog iets, in je form zeg je method = post. Maar toch roep je alles aan met get, hoe kan dit?
Toevoeging op 07/02/2012 21:29:03:
Op regel 12 en 13 'kopieer' je de get in een andere variabelen. Zet deze gewoon direct waar je ze hebben wilt, ipv kopieren. O
Zoek hier in de tutorials eens naar hoe je sql bouwt, en hoe je dat afhandelt.
O ja, variabelen buiten qoutes
Toevoeging op 07/02/2012 21:29:03:
Op regel 12 en 13 'kopieer' je de get in een andere variabelen. Zet deze gewoon direct waar je ze hebben wilt, ipv kopieren. O
Zoek hier in de tutorials eens naar hoe je sql bouwt, en hoe je dat afhandelt.
O ja, variabelen buiten qoutes
@jeroen
de get gebruik ik voor de login.php?act=login e.d. de post is voor ($_POST['username']); of klopt dat zo niet??
Verder heb ik het script nu aangepast maar als ik het nu uitvoer krijg ik na te zijn ingelogd een witte pagina:
de get gebruik ik voor de login.php?act=login e.d. de post is voor ($_POST['username']); of klopt dat zo niet??
Verder heb ik het script nu aangepast maar als ik het nu uitvoer krijg ik na te zijn ingelogd een witte pagina:
Code (php)
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
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
<?php
require("config.php");
if (!isset($_GET['act'])) {
echo("<form method='POST' action='$PHP_SELF?act=login'>
Username: <input type='text' name='username' /><br />
Password: <input type='password' name='password' /><br />
<input type='submit' value='Login!' />
</form");
} if (isset($_GET['?act=login'])){
$username = ($_POST['username']);
$password = ($_POST['password']);
$check = 'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
$count = mysql_num_rows($res);
if($count==0){
echo("The username/password was not found. $username $password");
} else{
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}}
?>
require("config.php");
if (!isset($_GET['act'])) {
echo("<form method='POST' action='$PHP_SELF?act=login'>
Username: <input type='text' name='username' /><br />
Password: <input type='password' name='password' /><br />
<input type='submit' value='Login!' />
</form");
} if (isset($_GET['?act=login'])){
$username = ($_POST['username']);
$password = ($_POST['password']);
$check = 'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
$count = mysql_num_rows($res);
if($count==0){
echo("The username/password was not found. $username $password");
} else{
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}}
?>
jeroen bedoelt
als jij een taart naar iemands gezicht gooit , krijg je geen reactie of je het goed hebt gedaan of niet goed hebt gedaan. ( oftewel een fouthandeling )
dat doe je doormiddel van een IF / ELSE
dus IF (ik gooi een taart op zijn gezicht ){
echo "de man rent achter me aan";
}
else {
echo "de man blijft stilstaan";
}
als jij een taart naar iemands gezicht gooit , krijg je geen reactie of je het goed hebt gedaan of niet goed hebt gedaan. ( oftewel een fouthandeling )
dat doe je doormiddel van een IF / ELSE
dus IF (ik gooi een taart op zijn gezicht ){
echo "de man rent achter me aan";
}
else {
echo "de man blijft stilstaan";
}
@reshadd
Oke, klopt inderdaad, heb ik nu opgelost
@jeroen
Als ik doe:
'SELECT * FROM project2_members WHERE username = "('$_POST['username']')" AND password = "('$_POST['password']')" ';
Krijg ik een error, komt ik doe denk ik iets verkeerd met de quoute's maar weet niet wat.
Oke, klopt inderdaad, heb ik nu opgelost
@jeroen
Als ik doe:
'SELECT * FROM project2_members WHERE username = "('$_POST['username']')" AND password = "('$_POST['password']')" ';
Krijg ik een error, komt ik doe denk ik iets verkeerd met de quoute's maar weet niet wat.
Eerst, je krijgt een wite pagina omdat regel 10 niet klopt. Dit moet zijn $_GET['act'] == login
Ten tweede, haal altijd variabelen buiten quotes:
"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'"
Toevoeging op 07/02/2012 21:48:49:
Verder is het natuurlijk slecht om wachtwoorden plain-text op te slaan, maar dat terzijde
Ten tweede, haal altijd variabelen buiten quotes:
"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'"
Toevoeging op 07/02/2012 21:48:49:
Verder is het natuurlijk slecht om wachtwoorden plain-text op te slaan, maar dat terzijde
Heey Jongens,
Allemaal hartstikke bedankt, login doet het.
Wat betreft plain-text dat was puur omdat hij het niet deed dat ik de md5 had weggehaald.
Nog een 2e vraag wat kan ik nog doen om sql-injection tegen te gaan??
Allemaal hartstikke bedankt, login doet het.
Wat betreft plain-text dat was puur omdat hij het niet deed dat ik de md5 had weggehaald.
Nog een 2e vraag wat kan ik nog doen om sql-injection tegen te gaan??
Alle gegevens die van de gebruiker komen mysql_real_escape_string() omheen zetten. Nogmaals, ik verwijs je naar de tutorials over sql en foutafhandeling hier op phphulp
Misschien iets voor jou: Beginnersfouten tegengaan
@jeroen
Oke, ga ik zeker even gebruiken, hartstikke bedankt voor alle hulp. Mag dit topic nog even open blijfen voor evt. vragen?
Oke, ga ik zeker even gebruiken, hartstikke bedankt voor alle hulp. Mag dit topic nog even open blijfen voor evt. vragen?
Maak je daarover geen zorgen; topics worden nooit gesloten tenzij daar een goede reden voor is.
@roel
Oke, je ziet op veel forums dat ze worden gesloten als alles is opgelost. Ga zeker het script van beginnersfouten doornemen. Bedankt
Oke, je ziet op veel forums dat ze worden gesloten als alles is opgelost. Ga zeker het script van beginnersfouten doornemen. Bedankt
als je md5 gebruikt bij het registreren dan moet je dit ook weer decoden als je inlogt in je mysql
dat doe je als volgt
dat doe je als volgt
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password='".md5($_POST['password'])."'
?>
"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password='".md5($_POST['password'])."'
?>
@reshadd, ga aub eerst zelf leren voordat je antwoorden wilt geven! Want ook dit script is hackgevoelig door geen gebruik mysql_real_escape_string.
En een wachtwoord met alleen md5 is allang niet veilig meer. Gebruik een Salt + Pepper (liefst dynamisch) en een van de sha* decrypt functies.
En een wachtwoord met alleen md5 is allang niet veilig meer. Gebruik een Salt + Pepper (liefst dynamisch) en een van de sha* decrypt functies.
Zeg het dan wel goed reshadd. MD5 is niet te decoderen.
Je moet wanneer je inlogt het ingevoerde wachtwoord encoden en DIE vergelijken met een record uit de database.
Overigens is MD5 niet aan te raden voor wachtwoord hashes.
Je moet wanneer je inlogt het ingevoerde wachtwoord encoden en DIE vergelijken met een record uit de database.
Overigens is MD5 niet aan te raden voor wachtwoord hashes.
Overigens, wat is de beste manier om te cobtroleren of een form verzonden is?
ehm Wouter J als je even alles zou lezen zou je niet gelijk een dom antwoord geven,
matthijs raad hem aan om zijn wachtwoorden te beveiligen, hij zegt dat hij de MD5 weg had gehaald omdat het niet werkte met inloggen, dus ik legde hem uit hoe dat kan, het ging om de MD5! dus ik snap niet waarom jij over de mysql_real_escape_string komt terwijl we het over de MD5 hebben?
en dat je md5 beter niet kan gebruiken dat snap ik ook wel maar het ging hier even om waarom zijn md5 het NIET deed en hoe het wel ZOU KUNNEN werken
@roel encoden thats what i ment maar ik gaf er een voorbeeld bij toch ;) dus als ik ipv encoden per ongeluk decoden zeg dan gaat de wereld er niet ten onder van kan iedereen overkomen als je van 7 uur tot nu aan het werk bent -_- maar ik zal er voortaan op letten
matthijs raad hem aan om zijn wachtwoorden te beveiligen, hij zegt dat hij de MD5 weg had gehaald omdat het niet werkte met inloggen, dus ik legde hem uit hoe dat kan, het ging om de MD5! dus ik snap niet waarom jij over de mysql_real_escape_string komt terwijl we het over de MD5 hebben?
en dat je md5 beter niet kan gebruiken dat snap ik ook wel maar het ging hier even om waarom zijn md5 het NIET deed en hoe het wel ZOU KUNNEN werken
@roel encoden thats what i ment maar ik gaf er een voorbeeld bij toch ;) dus als ik ipv encoden per ongeluk decoden zeg dan gaat de wereld er niet ten onder van kan iedereen overkomen als je van 7 uur tot nu aan het werk bent -_- maar ik zal er voortaan op letten



