2010-06-07 114 views
2

這個頁面像一個魅力多年一樣...輸入相應的用戶名和密碼,您將被重定向到您的目錄。現在突然間,所有嘗試登錄 - 有效或以其他方式 - 導致頁面保持靜態...沒有消息,沒有重定向,什麼都沒有。我的PHP登錄不再有效

代碼中沒有任何改變,它只是簡單的不再工作。這可能是服務器端某種改變的結果嗎?

是的,我知道它不是超級安全的,但它對我們的目的已經足夠好了。我當然願意提供更好的建議。我只需要它工作...並繼續工作。

請溫柔!我對編程幾乎一無所知。

這裏是頁面代碼:

<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> 

回答

3

它看起來像取決於被初始化的全局變量,而不是正確使用它們。您可以使用$ username和$ password而不需要初始化它們。正確的方法是:

$ username = $ _POST ['username']; $ password = $ _POST ['password'];

在使用它們之前。這將導致他們更新服務器端的東西。

+0

果然,這個週末有一個服務器移動。謝謝你花時間看看,克里斯。作品! – 2010-06-07 21:36:31

3

閱讀上register_globals的,以及爲什麼你應該禁用它們(可能有人這樣做了)。使用$ _POST數組。

順便說一句:如果我能猜到/incoming/clients050203/...../的路徑,我可以完全繞過你的登錄腳本嗎?看起來像它..

BTW2:現在我也窺探'<?= $ message?>',它們被稱爲short_open_tags,它可能會在未來的某個地方消失。只是爲了防止今天的混亂髮生在幾年:)

+0

感謝Wrikken。代替short_open_tags,拉入消息文本的正確方法是什麼? – 2010-06-07 21:36:50

+0

不幸的是,longhand:<?php echo $ message;?> – Wrikken 2010-06-07 21:43:27

4

據我所知,你的代碼依賴於register_globals,它已被棄用多年了。您的服務器可能已升級到較新版本的php。

使用register_globals真的很糟糕,不是「你不應該」那種壞,但是「它是瘋狂的使用它」。請不要試圖找到解決辦法。使用$ _GET和$ _POST參數來實現您的目標。

+0

謝謝,FlorianH。我根據下面Chris和Martin Eve的更具體的答案更新了代碼。 – 2010-06-07 21:37:15

0

您正在迴應一個< META>標籤到身體的中間,這是無效的標記,並可能不會正確重定向。

這不會解決你的安全,但是儘量將你所有的PHP代碼的任何HTML聲明和使用前:

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

我把它放進去,它不起作用 - 它組裝了帶有點和空格的URL。我將其更改爲: header(「Location :./ incoming/clients050203/$ directory [$ userIndex]「); 它開始工作,即使它有效,這是否錯誤? – 2010-06-07 21:35:53

+0

Martin提出了一個令人困惑的小錯誤,你的修改會放置一個數組在像這樣的字符串中,但不完全正確,請參閱http://nl2.php.net/manual/en/language.types.string.php#language.types.string.parsing – Wrikken 2010-06-07 21:49:47