Max. lengte username en password

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Hey hey, ik heb het volgende script, gebruikers registreren zich en hun opgegeven informatie wordt dan verwerkt:

register.php
PHP:
<?

echo'

<form name="register" method="post" action="registerdone.php">
<input name="username" type="text" value="username" size="20"/><br>
<input name="password" type="text" value="password" size="20"/><br>
<input name="email" type="text" value="email" size="20"/><br>
<input type="hidden" value="'. $_SERVER['REMOTE_ADDR'] .'" name="ip"/>
<input type="submit" name="submit" value="submit"/>
<input type="reset" name="reset" value="reset"/>
</form>';

?>


registerdone.php
PHP:
<?

include("config.php");

$query  = "SELECT username FROM users WHERE username='".$_POST[username]."'";
$result = mysql_query($query) or die('Error, query failed');
if (mysql_num_rows($result) == "1")
            {
              //Melding bij geen quotes in database
              echo"<center>That username is already taken, please pick another one.</center><br><br>";


}
else
{

$query  = "SELECT email FROM users WHERE email='".$_POST[email]."'";
$result = mysql_query($query) or die('Error, query failed');
if (mysql_num_rows($result) == "1")
            {
              //Melding bij geen quotes in database
              echo"<center>That e-mail address is already in use, creating more than one account is not allowed.</center><br><br>";

}
else
{

$maxName = "20";
$maxPass = "10";

//Afbeelding controleren
$username = '".$_POST[username]."';
$password = '".$_POST[password]."';

if($username > $maxName || $password > $maxPass)
{
  echo "<b>Your username and/or password are too long, click <a href='javascript:history.go(-1)' >here</a> to return.</b>";
}
else
{ 

$Query = "INSERT INTO users SET id = '', ip='".$_POST[ip]."', username='".$_POST[username]."', password='".$_POST[password]."', email='".$_POST['email']."'";
  $Result = mysql_query($Query) or die (mysql_error());
  echo "Account succesfully created!<br />
            You can now use your username and password to log in.";
}
}
}
?>

Ik geef op de volgende manier dus de max. lengte van de username en password aan die worden opgegeven op de vorige pagina:

PHP:
$maxName = "20";
$maxPass = "10";

//Afbeelding controleren
$username = '".$_POST[username]."';
$password = '".$_POST[password]."';

if($username > $maxName || $password > $maxPass)
{
  echo "<b>Your username and/or password are too long, click <a href='javascript:history.go(-1)' >here</a> to return.</b>";

Probleem is dat dit absoluut geen effect heeft... de username en password worden gewoon in de database gepropt ook al zijn ze veel te lang.

Ik heb het ook al zo geprobeerd:
PHP:
if('".$_POST[username]."' > 20 || '".$_POST[password]."' > 10)
{
  echo "<b>Your username and/or password are too long, click <a href='javascript:history.go(-1)' >here</a> to return.</b>";

en nog een paar andere manieren, maar niets schijnt te werken. Zit er ergens een foutje in het script?
 
Gratis tipje ;)

Wat je nu eigenlijk controleert is of de waarde van de gebruikersnaam groter is dan 20. Maar aangezien letters na getallen komen is dat altijd TRUE.

edit: Waarom doe je dit eigenlijk en niet als daaronder?
PHP:
//Jouw manier
$username = '".$_POST[username]."';
// Anders
$username = $_POST['username'];
 
Laatst bewerkt:

Handig? Je schiet er niets mee op...

Probeer dit voor de grap eens:
PHP:
$username = "Tha Devil";
$strlen = strlen($username);
$countchars = count_chars($username);

foreach($countchars AS $val){
$countchars_modified .= $val;
}

echo 'The output of strlen is: '.$strlen .'<br />
     The output of count_chars is:<br /> '.$countchars_modified;
?>
 
Laatst bewerkt:
Tha_Devil, ik begrijp nou nog steeds niet zo goed wat ik moet doen. Die pagina die je, gul als je bent, gratis en voor niets gaf, is voor mij een soort van Chinees als beginnende PHP schrijver ;)
 
Ai, Ai een pijnscheut:D Ik had verwacht dat je nu wel iets meer wist :p

Snap je het bovenstaande script wel waarin ik het verschil duidelijk maak tussen strlen en count_chars?

En zou je ook nog antwoord willen geven op mijn edit.
 
Ook je bovenstaande script kan ik niet wijzer van worden ;p

En wat betreft je edit, ik heb '".$_POST[username]."' zo ingevuld omdat ik hem ook zo invulde in de query. Wist niet dat daar een verschil in zat.
 
Heb je het script met het verschil al uitgeprobeerd en gezien wat strlen doet?
 
Ik zou wel willen, maar ik weet niet hoe ik het toe moet passen op mijn script :/
 
Argh, ik had toch wel verwacht dat je dat zou kunnen...

Nou, ik strijk wel weer over mijn hart :rolleyes:
PHP:
$maxName = "20"; 
$maxPass = "10"; 

//Afbeelding controleren 
$username = $_POST['username']; 
$password = $_POST['password']; 

if(strlen($username) > $maxName || strlen($password) > $maxPass) 
{ 
  echo "<b>Your username and/or password are too long, click <a href='javascript:history.go(-1)' >here</a> to return.</b>"; 
}

Ik zie trouwens dat je de wachtwoorden niet encrypt... Dat zou wel netjes zijn om te doen, nu kan jij (en wellicht anderen) gewoon in de database iemands wachtwoord opzoeken en de kans is groot dat diegene dat wachtwoord voor meerdere sites gebruikt...
 
Argh, ik had toch wel verwacht dat je dat zou kunnen...

Nou, ik strijk wel weer over mijn hart :rolleyes:
PHP:
$maxName = "20"; 
$maxPass = "10"; 

//Afbeelding controleren 
$username = $_POST['username']; 
$password = $_POST['password']; 

if(strlen($username) > $maxName || strlen($password) > $maxPass) 
{ 
  echo "<b>Your username and/or password are too long, click <a href='javascript:history.go(-1)' >here</a> to return.</b>"; 
}

Ik zie trouwens dat je de wachtwoorden niet encrypt... Dat zou wel netjes zijn om te doen, nu kan jij (en wellicht anderen) gewoon in de database iemands wachtwoord opzoeken en de kans is groot dat diegene dat wachtwoord voor meerdere sites gebruikt...

Bedankt voor het voorkauwen, ik ga het zometeen proberen. En ja, ik ben wel van plan de wachtwoorden met een MD5 hash te encrypten, dat was de volgende stap. Ook is het de bedoeling dat een gebruiker zijn wachtwoord opnieuw in kan stellen dmv e-mail. Maar voor deze 2 dingen is vast weer een apparte, uitgebreide uitleg nodig :D En e-mail validatie voor het registrenen zou ook een mooie optie zijn, maar dit is vast wel gemakkelijk op hotscripts ofzo te vinden, dus effe zoeken.

EDIT: Nou, checken hoe lang de username en pass mogen zijn werkt nu iig wel :D Toch vreemd dat de eerste manier niet werkt, want die werkte wel voor afbeeldingen.
 
Laatst bewerkt:
md5 is een makkie, gewoon op de originele string allerlei controles doen en daarna bij de insert zeggen
PHP:
$password = md5($password);
(Of je doet het bij de insert...)

Daarna is het bij het inloggen controleren of de $_POST waarde gelijk is aan de md5 hash die in de database staat...
PHP:
if(md5($_POST['pass']) == $loginRow['password']) {
  echo 'Welcome back';
  //en dan wat sessies/cookies aanmaken ;)
}
 
Klink makkelijk, ik hoop dat het ook echt zo is ^^

Ik neem overigens aan dat als wachtwoorden met MD5 encrypted zijn, ze niet naar een email adres gestuurd kunnen worden? Het sowieso beter als ze hem op een of andere manier gewoon opnieuw in kunnen stellen maar voordat ik daar over ga zeuren zal ik eerst eens even verder zoeken :D
 
Is het niet eenvoudiger om je invulveld te grote waardes af te kappen?

PHP:
<input name='bla' maxlength='20'>

Zo kunnen er niet meer dan 20 tekens in je invulveld staan =)
 
Ik neem overigens aan dat als wachtwoorden met MD5 encrypted zijn, ze niet naar een email adres gestuurd kunnen worden?

Klopt, dat kun je oplossen door ze gewoon een random wachtwoord toe te sturen...

Die heb ik ooit eens gemaakt, wellicht kan ik hem nog ergens terugvinden...
 
PHP:
    function generatePassword($length = 8)
    {
        $chars = 'abcdefghijklmnopqrstuvwxyz23456789';
        $numChars = strlen($chars);
 
        $string = '';
        for ($i = 0; $i < $length; $i++) {
            $string .= substr($chars, rand(1, $numChars) - 1, 1);
        }
        return $string;
    }

Een heel simpel wachtwoordgeneratortje. Bij die $chars kun je natuurlijk alle tekens invullen die je zelf wilt.
 
Zoiets zal die van mij ook zijn, alleen zorgt die ook meteen voor aanpassing in de DB en het versturen van een mailtje...

Helaas kan ik hem niet bereiken daar mijn hosting mij zit te naaien. Ik heb het script op een account staan welke ik heb opgezegd, maar het wachtwoord niet meer voor weet. Nu willen ze wel mijn wachtwoord wijzigen maar dan moet ik eerst 7,- lappen aan "administratiekosten en systeembeheer".

Nu blijkt dus ook dat mijn account niet eens als opgezegd bekend staat terwijl ik de formulieren persoonlijk in de brievenbus heb gedonderd... Grr hopeloze lui qua opzeggingen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan