Bij mijn inlogsysteem flipt de halve site als je je naam geschreven hebt met een extra spatie aan het einde. Ik bedoel hiermee, dat je een gebruikersnaam hebt waarin geen spaties voorkomen, maar dan toch, per ongeluk, een spatie achter je naam typt. Dan kan je namelijk gewoon inloggen met onderstaand script! Weet iemand hoe dit verholpen kan worden? Ik gebruik de gegevens van het phpbb forum, dus misschien kan ik daar de sessies van overnemen, zodat je niet 2 keer hoeft in te loggen (site + forum) ?

hieronder even mijn inlogformuliertje:


<html>
<form method='post' action="../inloggen_achter.php">
<table cellpadding='0' cellspacing='0' border='0' width='90%'>
<tr>
<td align="right" class="style1">Gebruikersnaam:</td><td class="style1"><input name='gebruikersnaam' type='text' size="10" /></td>
</tr><tr>
<td align="right" class="style1">Wachtwoord:</td><td class="style1"><br /><input name='wachtwoord' type='password' size="10" /></td>
</tr><tr>
<td class="style1">&nbsp;</td>
</tr><tr>
<td class="style1"><div align="right">
<a href='../forum/profile.php?mode=register&agreed=true'>Registreer nieuw</a>
</div></td>
<td class="style1"><div align="center">
<input type='submit' name='submit' value='Login' />
</div></td>
</tr>
</table>
</form>
</html>


hieronder de code van de sessies plaatsen enzo:

<?php
session_start();
if(!empty($_POST)){
include("dbconnect.php");
$gebruiker = $_POST["gebruikersnaam"];
$gebruiker = strtolower($gebruiker);
$gebruiker = ucfirst($gebruiker);
$wachtwoord = $_POST["wachtwoord"];
$wachtwoord = md5($wachtwoord);
$query = "SELECT * FROM phpbb_users WHERE username='$gebruiker' AND user_password='$wachtwoord'";

$result = mysql_query($query);

if($row = mysql_fetch_array($result)){
$_SESSION['gebruiker'] = $gebruiker;
$gebruiker_id = $row[user_id];
$_SESSION['gebruiker_id'] = $gebruiker_id;
//goede login
header("Location: index.php");

exit();
}
else { //foute login
echo "Je hebt geen goede combinatie van gebruikersnaam en wachtwoord gebruikt!";
die();
} }
else{
header("Location: index.php");
}
?>

Ik hoop dat iemand mij kan helpen! Vraag gerust naar meer info als het nodig is.

Alvast bedankt,

Nick
sry voor bump, maar dit probleem heb ik nog nergens kunnen vinden, weet iemand een oplossing?
trim($var) spaties horen niet thuis in een username
Vanwaar toch altijd die overbodige regels code? Die gebruik je alleen wanneer je tijd te veel hebt en bugs te weinig hebt...
<?
$gebruiker = $_POST["gebruikersnaam"];
$gebruiker = strtolower($gebruiker);
$gebruiker = ucfirst($gebruiker);
$wachtwoord = $_POST["wachtwoord"];
$wachtwoord = md5($wachtwoord);
?>
Of:
<?
$gebruiker = strtolower($_POST["gebruikersnaam"]);
$gebruiker = ucfirst($gebruiker); // kan ook nog weg
$wachtwoord = md5($_POST["wachtwoord"]);
?>
Verder lijkt mij ucfirst() wat vreemd, dat is een functie om output netjes op te maken, niet om input voor een query op te maken. Daarnaast let MySQL over het algemeen niet op de hoofd- of kleine letters in vergelijkingen, de functie kun je dus gewoon weghalen.

Het gebruik van mysql_real_escape_string() ben je nog vergeten, SQL-injection ligt dus op de loer.
Michael schreef op 03.04.2007 00:22
trim($var) spaties horen niet thuis in een username


in? Eromheen...
Hoe kan ik mysql_real_escape_string() dan het makkelijkst gebruiken?
Gewoon niet. magic_quotes_gpc staat waarschijinlijk aan dus mysql injection is onmogelijk, klaar!
Je kan spaties aan t eind van je username meenemen door je form data net voordat ie gepost wordt (onsubmit="" in <form..>) ff urlencoden (escape() in javascript) zodat spaties niet getrimd worden.
Spatie aan t eind van een gebruikersnaam is echter een beetje vreemd.

@Michael
Zou niet weten waarom spaties niet in een gebruikersnaam thuis horen...

[edit]Je controleert trouwns niet of $_POST['gebruikersnaam'] etc wel bestaan... Controleer niet of $_POST empty is, maar of er in zit wat jij nodig hebt. Ook al zit er een MB aan rotzooi in, als het niets is waar jij iets mee kan, had ie net zo goed (beter) leeg kunnen zijn.[/edit]
Spaties horen ook niet in gebruikersnamen thuis, klopt, maar als iemand een spatie intypt aan het einde van zijn naam, kan hij wel inloggen! dat was namelijk het probleem.
Nick schreef op 03.04.2007 15:24
Hoe kan ik mysql_real_escape_string() dan het makkelijkst gebruiken?

RTFM...

Dat had je zelf toch ook kunnen bedenken?

Reageren