change password
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$playerinfo="SELECT * from players where name='$player'";
$playerinfo2=mysql_query($playerinfo) or die("could not get player stats!");
$playerinfo3=mysql_fetch_array($playerinfo2);
$oldpass=$_POST['old_pass'];
$newpass=$_POST['new_pass'];
$newpass2=$_POST['new_pass2'];
$oldpass=strip_tags($oldpass);
$oldpass=md5($oldpass);
$queryCP = "select name, password from players where name='$player' and password = '$oldpass'";
$resultCP = mysql_query($queryCP) or die("Could not query players");
$resultCP = mysql_fetch_array($resultCP);
?>
$playerinfo="SELECT * from players where name='$player'";
$playerinfo2=mysql_query($playerinfo) or die("could not get player stats!");
$playerinfo3=mysql_fetch_array($playerinfo2);
$oldpass=$_POST['old_pass'];
$newpass=$_POST['new_pass'];
$newpass2=$_POST['new_pass2'];
$oldpass=strip_tags($oldpass);
$oldpass=md5($oldpass);
$queryCP = "select name, password from players where name='$player' and password = '$oldpass'";
$resultCP = mysql_query($queryCP) or die("Could not query players");
$resultCP = mysql_fetch_array($resultCP);
?>
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 ($resultCP)
{
if($newpass==$newpass2)
{
$SQLchangepass = "UPDATE players SET password = $newpass where name='$player'";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
}
else
{
echo "You did not retype your password correct.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
if ($resultCP)
{
if($newpass==$newpass2)
{
$SQLchangepass = "UPDATE players SET password = $newpass where name='$player'";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
}
else
{
echo "You did not retype your password correct.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
in de pagina hiervoor heb ik een formpje, daarmee kan dit script ook perfect communiceren. hoe zorg ik dat hij wél het wachtwoord in de database veranderd?
- Variabelen butien quotes
- Je mist fatsoenlijke foutafhandeling
- SQL injection is mogelijk, en voor iedereen is het een feest om je database over hoop te gooien
SQL injection in mogelijk en er is geen goede foutenafhandeling. Or die errors zijn niet echt gebruiksvriendelijk!
EDIT
Ik zie dat AAR het ook al gezegd heeft. Even wat inhoudelijk dan:
Als je wilt weten wat SQL injection is moet je daar even op google. Maar het komt er zo op neer dat mensen het beheer over je database hebben. PLat gezegd.
Over fouten afhandeling:
Wat jij doet is het volgende
or die (mysql_error());
Dit is niet gebruiks vriendelijk. Je kan het beter zo oplossen
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($Result = mysql_query ($Query))
{
}
else
{
echo 'Er is een fout opgetreden in de query ';
}
?>
if($Result = mysql_query ($Query))
{
}
else
{
echo 'Er is een fout opgetreden in de query ';
}
?>
Verder gebruik jij in je query's de variablen binnen de quote's. Dat kan je dus zo beter oplossen
2e EDIT
Ook zie ik een schoonheidsfoutje. De ene keer gebruik je update en de andere keer UPDATE en hetzelfde met WHERE. Het is voor jezelf overzichtelijker om het in hoofdletters te doen.
voorbeeld
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$Query_Insert = "INSERT INTO tabel (veld1, veld2) VALUES ('".mysql_real_escape_string ($_POST['invoer1'])."', '".mysql_real_escape_string ($_POST['invoer2'])."')";
# gelijk maar even kijken of de query gelukt is. Owja.. mysql_real_escape_string is dus voor het voorkomen van de SQL injections
if($Result = mysql_query ($Query_Insert))
{
echo 'Query is gelukt';
}
else
{
echo 'Query is niet gelukt.'; # eventueel nog mysql_error neerzetten voor het debuggen
}
?>
$Query_Insert = "INSERT INTO tabel (veld1, veld2) VALUES ('".mysql_real_escape_string ($_POST['invoer1'])."', '".mysql_real_escape_string ($_POST['invoer2'])."')";
# gelijk maar even kijken of de query gelukt is. Owja.. mysql_real_escape_string is dus voor het voorkomen van de SQL injections
if($Result = mysql_query ($Query_Insert))
{
echo 'Query is gelukt';
}
else
{
echo 'Query is niet gelukt.'; # eventueel nog mysql_error neerzetten voor het debuggen
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Niels K
Je hoort deze te krijgen: "could not update player in database"
Edit: En uiteraard de opmerlingen van Aart en Niels. Verder probeer je het nieuwe password zonder md5() (en zonder gebruik van quotes) in de database te stoppen.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
ik krijg "Successfully changed your password.". verder geen errors
Ook met je gereviseerde script?
thuron schreef op 15.01.2010 10:47:
ik krijg "Successfully changed your password.". verder geen errors
Dan is het nieuwe password waarschijnlijk 'password'.
Verwerk de punten van aar en mij eens.. Je zult zien dat de fout dan wat sneller boven water komt. Ook zet jij je password in 1 keer in de database zonder hem te encrypten. Gebruik daarvoor de functie md5 of sha1
is het zo beter?:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if ($resultCP2)
{
if($newpass==$newpass2)
{
$SQLchangepass = "UPDATE players SET password = $newpass where name='".$player."'";
mysql_query($SQLchangepass);
echo "Successfully changed your password.";
}
else if($newpass!=$newpass2)
{
echo "You did not retype your password correct.";
}
else
{
echo "There occured an error at the query.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
if ($resultCP2)
{
if($newpass==$newpass2)
{
$SQLchangepass = "UPDATE players SET password = $newpass where name='".$player."'";
mysql_query($SQLchangepass);
echo "Successfully changed your password.";
}
else if($newpass!=$newpass2)
{
echo "You did not retype your password correct.";
}
else
{
echo "There occured an error at the query.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
edit: bij het registreren incrypt ik em met md5, ik zal dat hier ook in doen.
Gewijzigd op 01/01/1970 01:00:00 door thuron thuron
Lees de opmerkingen nog eens goed door.
Edit: En waarom eerst die SELECT?
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
EDIT:
dus als ik het goed begrijp, als ik iets in de database wil INSERTEN dan is het veiligst niet dit:
Code (php)
1
2
3
2
3
<?php
$SQL = "INSERT into players(name, email, password, attack, defense) VALUES ('$player','$email','$password','0','0')";
?>
$SQL = "INSERT into players(name, email, password, attack, defense) VALUES ('$player','$email','$password','0','0')";
?>
maar dit:
Code (php)
1
2
3
2
3
<?php
$SQL = "INSERT into players(name, email, password, attack, defense) VALUES ('".mysql_real_escape_string ['$player']."','".mysql_real_escape_string ['$email']."','".mysql_real_escape_string ['$password']."','".mysql_real_escape_string ['0']."','".mysql_real_escape_string ['0']."')";
?>
$SQL = "INSERT into players(name, email, password, attack, defense) VALUES ('".mysql_real_escape_string ['$player']."','".mysql_real_escape_string ['$email']."','".mysql_real_escape_string ['$password']."','".mysql_real_escape_string ['0']."','".mysql_real_escape_string ['0']."')";
?>
zo ja, hoe zit het dan met data UPDATEN in de database? ook met mysql_real_escape_string?
EDIT2:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = $newpass where name='$player'";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
?>
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = $newpass where name='$player'";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
?>
zo pakt ie wel md5
Gewijzigd op 01/01/1970 01:00:00 door thuron thuron
or die() moet je vergeten. Je wilt je script niet zomaar laten stoppen.l
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if(!empty($_POST['new_pass']) and ($_POST['new_pass'] == $_POST['new_pass2']))
{
$SQLchangepass = "UPDATE players
SET password = MD5(" . $_POST['new_pass'] . ")
WHERE password = MD5(" . $_POST['old_pass'] . ")
AND name = '" . mysql_real_escape_string($player) . "'";
$result = mysql_query($SQLchangepass);
if($result and (mysql_affected_rows() > 0))
{
echo "Successfully changed your password.";
}
else
{
echo "Nothing changed.";
}
}
?>
if(!empty($_POST['new_pass']) and ($_POST['new_pass'] == $_POST['new_pass2']))
{
$SQLchangepass = "UPDATE players
SET password = MD5(" . $_POST['new_pass'] . ")
WHERE password = MD5(" . $_POST['old_pass'] . ")
AND name = '" . mysql_real_escape_string($player) . "'";
$result = mysql_query($SQLchangepass);
if($result and (mysql_affected_rows() > 0))
{
echo "Successfully changed your password.";
}
else
{
echo "Nothing changed.";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
SanThe schreef op 15.01.2010 11:18:
Ik neem aan dat $player reeds bekend is en dat daar de naam van de gebruiker in staat.
correct!
EDIT:
is dit beter of slechter?:)
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 ($resultCP2)
{
if($newpass==$newpass2)
{
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = '" .mysql_real_escape_string ['$newpass']."' where name=" .mysql_real_escape_string ['$player']."";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
}
else
{
echo "You did not retype your password correct.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
if ($resultCP2)
{
if($newpass==$newpass2)
{
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = '" .mysql_real_escape_string ['$newpass']."' where name=" .mysql_real_escape_string ['$player']."";
mysql_query($SQLchangepass) or die("could not update player in database");
echo "Successfully changed your password.";
}
else
{
echo "You did not retype your password correct.";
}
}
else
{
echo "You did not enter your old password correct.";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door thuron thuron
Moet het MD5 gebeuren niet zo?
@TS
'" .mysql_real_escape_string ['$newpass']."'
Dit moet zo zijn
'" .mysql_real_escape_string ($newpass)."'
En nog steeds gebruik je or die..
Gewijzigd op 01/01/1970 01:00:00 door Niels K
mysql_real_escape_string over een MD5() is niet echt nodig. Ik heb nog nooit een single-quote o.i.d. gezien.
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
if ($resultCP2)
{
if($newpass==$newpass2)
{
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = '" .mysql_real_escape_string ('$newpass')."' where name=" .mysql_real_escape_string ('$player')."";
mysql_query($SQLchangepass);
echo "Successfully changed your password.";
}
else if($newpass!=$newpass2)
{
echo "You did not retype your password correct.";
}
else
{
echo "There occured an error at the query.";
}
else
{
echo "You did not enter your old password correct.";
}
}
?>
if ($resultCP2)
{
if($newpass==$newpass2)
{
$password=md5($password);
$SQLchangepass = "UPDATE players SET password = '" .mysql_real_escape_string ('$newpass')."' where name=" .mysql_real_escape_string ('$player')."";
mysql_query($SQLchangepass);
echo "Successfully changed your password.";
}
else if($newpass!=$newpass2)
{
echo "You did not retype your password correct.";
}
else
{
echo "There occured an error at the query.";
}
else
{
echo "You did not enter your old password correct.";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door thuron thuron
Jouw code van 15.01.2010 11:21:
De echo op regel 19 komt als de query mislukt 'if ($resultCP2)'.
Regel 6 'MD5()' kan direct in de query.
Regel 8 MD5 hoeft geen mysql_real_escape_string().
Regel 8 mysql_real_escape_string heeft () en geen [] haken.
Regel 8 where name= ... hier horen enkele quotes om de data heen.
Regel 8 $player hoort niet tussen quotes.
Regel 9 Gebruik geen OR DIE(..).
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
SanThe schreef op 15.01.2010 11:36:
Mijn stukje code vervangt beide stukjes code uit je eerste post.
Jouw code:
De echo op regel 19 komt als de query mislukt 'if ($resultCP2)'.
Regel 6 'MD5()' kan direct in de query.
Regel 8 MD5 hoeft geen mysql_real_escape_string().
Regel 8 mysql_real_escape_string heeft () en geen [] haken.
Regel 8 where name= ... hier horen enkele quotes om de data heen.
Regel 8 $player hoort niet tussen quotes.
Regel 9 Gebruik geen OR DIE(..).
Jouw code:
De echo op regel 19 komt als de query mislukt 'if ($resultCP2)'.
Regel 6 'MD5()' kan direct in de query.
Regel 8 MD5 hoeft geen mysql_real_escape_string().
Regel 8 mysql_real_escape_string heeft () en geen [] haken.
Regel 8 where name= ... hier horen enkele quotes om de data heen.
Regel 8 $player hoort niet tussen quotes.
Regel 9 Gebruik geen OR DIE(..).
zie mijn vorige post :) de rest zal ik nog even nachecken
@ Regel 8 $player hoort niet tussen quotes.
waarom $player niet en de rest wel?...
Gewijzigd op 01/01/1970 01:00:00 door thuron thuron
thuron schreef op 15.01.2010 11:38:
@ Regel 8 $player hoort niet tussen quotes.
waarom $player niet en de rest wel?...
waarom $player niet en de rest wel?...
Geen enkele $var hoort tussen quotes en zeker niet tussen enkele quotes.
SanThe schreef op 15.01.2010 11:42:
Geen enkele $var hoort tussen quotes en zeker niet tussen enkele quotes.
thuron schreef op 15.01.2010 11:38:
@ Regel 8 $player hoort niet tussen quotes.
waarom $player niet en de rest wel?...
waarom $player niet en de rest wel?...
Geen enkele $var hoort tussen quotes en zeker niet tussen enkele quotes.
ok dat heb ik gefixed.
Hoe haal ik de "or die"'s weg als ik midden tussen if's en else if's zit?