2011-03-12 69 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/