2011-03-12 67 views
0

我有一個表格用下面的代碼來註冊:的MySQL不添加到數據庫

<form method="post"> 
Username<input type="text" size="12" maxlength="16" name="username"><br /> 
Password<input type="password" size="12" maxlength="32" name="password"><br /> 
<input type="submit" name="submit" value="Sign Up!" /> 
</form> 

然後我把它也檢查,如果用戶名包含任何特殊字符,如果它沒有運行該代碼:

define("DB_SERVER", "localhost"); 
define("DB_USER", "will"); 
define("DB_PASS", "blahblah"); 
define("DB_NAME", "blahblah"); 
define("TBL_USERS", "users"); 

$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error()); 
mysql_select_db(DB_NAME, $connection) or die(mysql_error()); 

function addNewUser($username, $password){ 
    global $connection; 
    $username =$POST['username']; 
    $password =$_POST['password']; 
    $password1 = md5($password); 
    $q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')"; 
    return mysql_query($q, $connection); 
} 

這應的用戶名和密碼添加到我的表,密碼爲MD5哈希,但它並沒有,可能有人請幫助我。

謝謝!

+0

首先是強制性[xkcd](http://xkcd.com/327)。但是,無論如何,我真的建議您閱讀[這篇文章](http://www.phpfreaks.com/tutorial/php-security)瞭解PHP安全缺陷的一些知識。 – Znarkus 2011-03-12 21:36:53

回答

1

首先: 不要使用連接字符串將值插入數據庫。這是一個主要的安全漏洞,可以使用稱爲SQL注入的技術來利用它。您可以通過使用所謂的Prepared Statements來防止這種情況。

而這應該解決您的問題: 您可能不會真的調用addNewUser函數。你只需連接數據庫。

試試這個:

define("DB_SERVER", "localhost"); 
define("DB_USER", "will"); 
define("DB_PASS", "blahblah"); 
define("DB_NAME", "blahblah"); 
define("TBL_USERS", "users"); 

function addNewUser($username, $password){ 
    global $connection; 
    $password1 = md5($password); 
    $username = mysql_real_escape_string($username); 
    $q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')"; 
    return mysql_query($q, $connection); 
}  

$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error()); 
mysql_select_db(DB_NAME, $connection) or die(mysql_error()); 
addNewUser($_POST["text"], $_POST["password"]); 
+0

那麼我將如何停止SQL注入? – 2011-03-12 21:28:39

+0

使用準備好的語句。只是谷歌它! – Falcon 2011-03-12 21:31:25

+0

嘿,如果你喜歡我的回答,請給我評分! – Falcon 2011-03-12 21:32:38

0

這看起來並不像你實際上打電話給addNewUser這裏。此外,作爲未來的提示,使用準備好的語句避免SQL注入可能是除了最瑣碎的應用程序之外的其他任何方式。在PHP中使用SQL預處理語句的一個教程是here

0

$ username = $ POST ['username']是錯誤的。你忘了 _ 。它必須是$ username = $ _POST ['username']。

0

要超清晰...

你在那裏有一個功能,但它從來沒有所謂的,因爲每個人都有說。

稱呼它,添加此行的功能開始之前:

$var = addNewUser($_POST["username"], $_POST["password"]); 

編輯: 更多... 在你的功能,你已經有了$ username和$ password,你可以刪除這些行:

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

最後但並非最不重要的是,只有md5存儲您的密碼是不好的做法。閱讀:http://elbertf.com/2010/01/store-passwords-safely-with-php-and-mysql/