2009-10-24 120 views
0

我想從PHP製作一個註冊表單,將他們的用戶名和密碼註冊到我的SQL數據庫中。以下是我有:PHP註冊表 - SQL

的config.php:

<?php 
$host['naam'] = 'localhost';    // my host 
$host['gebruikersnaam'] = 'root';  // my database username 
$host['wachtwoord'] = ''; // my database password 
$host['databasenaam'] = 'project';  // my database name 

$db = mysql_connect($host['naam'], $host['gebruikersnaam'], $host['wachtwoord']) OR die ('Cant connect to the database'); 
mysql_select_db($host['databasenaam'], $db); 
?> 

的index.php:

<head> 
    <title>Deltalus Account Registration</title> 
    <style> 
    *{ FONT-SIZE: 8pt; FONT-FAMILY: verdana; } b { FONT-WEIGHT: bold; } .listtitle { BACKGROUND: #425984; COLOR: #EEEEEE; white-space: nowrap; } td.list { BACKGROUND: #EEEEEE; white-space: nowrap; } </style> 
    </head> 
    <center><br><br><br><br> 
    <h1>Deltalus Database</h1> 
    <table cellspacing=1 cellpadding=5> 
    <tr> 
    <td class=listtitle colspan=2>Register at my server</td></tr> 
    <form action="register_do.php" method="POST"> 
    <tr><td class=list align=right>Username:</td><td class=list><input type=text name=name maxlength="30"></td></tr> 
    <tr><td class=list align=right>Password:</td><td class=list><input type=password name=pass maxlength="30"></td></tr> 
    </td></tr> 
    <tr><td class=listtitle align=right colspan=2><input type=submit name=submit value='Register'></td></tr> 
    </form> 
    </table> 
    <br> 

    </center></body></html 

> 

register_do.php:

<?php 
print '<title>Deltalus Database Server</title>'; 
$name = $_POST['name']; 
$pass = $_POST['pass']; 
include('config.php'); 
$sel = 'SELECT * FROM user WHERE username="'.$_POST['name'].'"'; 
if($name == ""){ 
echo 'No username filled in'; 
exit(); 
}elseif(mysql_num_rows(mysql_query($sel)) >= 1){ 
echo 'This username does already exists!'; 
exit(); 
}elseif($pass == ""){ 
echo 'No password filled in'; 
exit(); 
}else{ 
$d = 'INSERT INTO users (username, password) VALUES ("'.$name.'", "'.$pass.'")'; 
mysql_query($d) OR die (mysql_error()); 
echo 'Your account has been created, you can now login.'; 
} 
?> 

好了,所以是問題,當我發佈到我的網站。它給了我這個錯誤,說POST不可用或者什麼。等待讓我備份,當我按下注冊表時,它說錯誤。我將如何解決這個問題?他們的編碼有什麼問題嗎?

感謝,

凱文

+0

「POST不可用或某事」是問題的最重要部分。如果您僅發佈了確切的錯誤消息,而沒有其他信息,那麼比發佈整個源代碼更容易幫助您。 – 2009-10-24 18:13:15

+5

我是否看到SQL注入漏洞? – ZippyV 2009-10-24 18:17:08

回答

0

這聽起來像你的HTTP服務器配置錯誤,和/或不接受POST請求。你有這個網頁在線,以便我可以看看,可能精心製作?

6

嗯......很多問題我不知道從哪裏開始。 首先,你的代碼是SQL injection天堂。
如果這段代碼能夠看到白天的光芒,那麼您需要完全重新考慮這一點。

試想,如果一個人指定的用戶名,會發生什麼:

blah","blah");DELETE TABLE users;

你沒有張貼您的登錄代碼這一點,但鑑於你目前的編碼風格,如果有人在登錄指定的密碼考慮的:

asdf" OR "1" = "1

這將有效地登錄,任何用戶無需輸入密碼。

密碼不應以純文本形式存儲。他們至少應該被加密存儲。在幾乎所有情況下,它們都應該被散列。也就是說他們應該使用SHA256等單向加密方式進行存儲。 A recent discussion on this.

然後要檢查用戶是否提供了有效的密碼,請比較兩個散列版本,並且永遠不知道原始文件是什麼。

考慮使用mysqli庫而不是mysql。 MySQL中的PHP是舊的,比mysqli慢很多。 Mysqli還提供了一些名爲prepared queries的東西,如果使用正確,可以消除SQL注入的風險。 A class I've written to simplify it's use.

除了這些問題,看起來你並沒有在你的register_do.php中包含config.php。沒有它,你的SQL語句將無法正常工作。

您使用的是什麼版本的php和mysql?

+1

這不是一個答案,而是+1,無論如何,只是爲了解決所有與此代碼有關的問題。 – 2009-10-24 19:21:49