2010-06-07 4 views
2

Cette page a fonctionné comme un charme pendant des années ... entrez l'identifiant de l'utilisateur et le mot de passe correspondants et vous serez redirigé vers votre répertoire. Maintenant, soudainement, toutes les tentatives de connexion - valides ou non - font que la page reste statique ... pas de message, pas de redirection, rien.Mon login PHP ne fonctionne plus

Rien dans le code n'a changé, il ne fonctionne tout simplement plus. Cela pourrait-il être le résultat d'une sorte de changement du côté du serveur? Oui, je sais que ce n'est pas super sécurisé, mais c'était assez bon pour nos besoins. Je suis certainement ouvert à de meilleures suggestions. J'en ai juste besoin pour travailler ... et continuer à travailler.

Soyez gentil! Je ne sais presque rien de la programmation.

Voici le code de la page:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" > 
<link href="ilium.css" rel="stylesheet" media="screen"> 
<title>Ilium: Client Login</title> 
</head> 
<body bgcolor="#bfbfcc" background="img/loginbg.gif"> 
<?php 


/* init vars */ 
$userExists = false; 
$userIndex = -1; 
$authenicated = false; 

/*********************************************** 
* edit this to add new users/password   * 
* - add user/pass/directory to the array  * 
* below: must be in same array index to work * 
***********************************************/ 
$user = array('foo', 'bar'); 
$pass = array('foo', 'bar'); 
$directory = array('foo', 'bar'); 

// run user/pass check if data passed 
if (isset($username) && isset($password)) 
{ 

// check if user name exists 
for ($i = 0; $i < count($user); $i++) 
{ 
if ($user[$i] == $username) 
{ 
$userExists = true; 
$userIndex = $i; 
break; 
} 
} 

// so user exists, now test password 
if ($userExists) 
{ 
$message = $message . "Username Valid<br>\n"; 

if ($pass[$userIndex] == $password) 
{ 
$authenicated = true; 
$link = "/incoming/clients050203/" . $directory[$userIndex] . "/"; 
$message = $message . "Password Valid - Redirecting to your folder...<br>\n"; 
} 
else 
{ 
$message = $message . "Incorrect Password<br>\n"; 
} 
} 
else 
{ 
$message = $message . "Incorrect User Name<br>\n"; 
} 

} 
?> 




<?php 

// user has been authenicated - move them to the correct directory 
if ($authenicated) 
{ 
    echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=" . $link . "\">"; 
} 
?> 

<img src="img/spacer.gif" alt="" width="1" height="112" border="0"> 
<form action="login.php" method="post"> 

<table width="496"> 
<tr> 
<td width="100"></td> 
<td colspan="4" width="469"><img src="img/please.gif" alt="" width="469" height="19" border="0"></td> 
</tr> 
<tr> 
<td width="100"><img src="img/spacer.gif" alt="" width="100" height="1" border="0"></td> 
<td width="227"> 

    <img src="img/spacer.gif" alt="" width="227" height="1" border="0"><br> 
</td> 
<td align="right" valign="top" width="84"><input type="text" name="username" size="12"><br></td> 
<td width="43"><img src="img/spacer.gif" alt="" width="43" height="1" border="0"><br> 
    <br> 
</td> 
<td align="right" valign="top" width="109"><input type="password" name="password" size="16"> 
    <p><br> 
    </p> 
</td> 
</tr> 
<tr> 
<td width="100"></td> 
<td valign="top" width="227"><div class="messages"><?=$message?></div></td> 
<td width="84"><br> 
</td> 
<td width="43"><br> 
</td> 
<td align="right" width="109"><input type="image" src="img/enter.gif" ALT="enter"><br> 
    <br> 
    <br> 
    <br> 
    <br> 
</td> 
</tr> 
</table> 

</form> 
</body> 
</html> 

Répondre

3

Il semble que vous dépendiez de l'initialisation des variables globales plutôt que de les utiliser correctement. Vous utilisez $ username et $ password sans les initialiser. La bonne façon serait de faire:

$ username = $ _POST ['nom d'utilisateur']; $ password = $ _POST ['mot de passe'];

Avant de les utiliser. Ce serait un résultat en mettant à jour des choses sur le côté serveur.

+0

Effectivement, il y avait un déménagement de serveur ce week-end. Merci d'avoir pris le temps de regarder, Chris. Travaux! –

3

lire sur register_globals, et pourquoi vous devriez les désactiver (probablement quelqu'un a fait cela). Utilisez le tableau $ _POST. BTW: si je peux deviner le chemin de /incoming/clients050203/...../, puis-je contourner complètement votre script de connexion? On dirait que ça ...

BTW2: maintenant j'espionne aussi le '<? = $ Message?>', Qui sont appelés short_open_tags, qui disparaîtront probablement quelque part dans le futur. Juste pour empêcher le chaos d'aujourd'hui de se produire dans quelques années :)

+0

Merci Wrikken. Au lieu des short_open_tags, quelle est la méthode correcte pour tirer le texte du message? –

+0

Malheureusement, longhand: Wrikken

4

Pour autant que je peux voir, votre code repose sur register_globals, qui a été obsolète depuis des années maintenant. Votre serveur a peut-être été mis à niveau vers une version plus récente de php. L'utilisation de register_globals est vraiment mauvaise, pas du genre "tu ne devrais pas", mais du "c'est fou de l'utiliser". S'il vous plaît, n'essayez pas de trouver un travail. Utilisez les paramètres $ _GET et $ _POST pour atteindre votre objectif.

+0

Merci, FlorianH. J'ai mis à jour le code par les réponses plus spécifiques de Chris et Martin Eve ci-dessous. –

0

Vous faites l'écho d'une balise META> < au milieu du corps, qui est un balisage non valide et ne redirigera probablement pas correctement.

Ce ne fixerai pas votre sécurité, mais essayez de mettre tout votre code PHP avant toute déclaration HTML et utilisation:

header('Location: ' . /incoming/clients050203/" . $directory[$userIndex] . "/'); 
+0

J'ai mis ceci dedans et cela n'a pas fonctionné - il a assemblé l'URL complète avec des points et des espaces. Je l'ai changé pour: header ("Emplacement :./ incoming/clients050203/$ répertoire [$ userIndex] "); –

+0

Martin a fait une petite erreur confuse et 's, votre modification va faire, en plaçant un tableau dans une chaîne comme celle-ci fonctionne mais n'est pas totalement correcte, voir http://nl2.php.net/manual/fr/language.types.string.php#language.types.string.parsing – Wrikken