使用带有Salt& MD5的Php提交到Mysql

时间:2011-08-02 21:34:25

标签: php mysql security

 <?php
require_once "dbcred.php";
$dbh = testdb_connect ();

/* Obliterate bad input */
$badpasses = $_POST['regpass'];
$salt = '~`!@#$%^&*()_-+=}]{[\|"><';
$secPass = md5($badpasses.$salt);

$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade)                VALUES('$_POST[reguser]',$secPass,'$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");

echo "Thanks for signing up!";

?>

为什么这不再提交给我的mysql数据库了? WAS提交下面的代码..

 <?php
require_once "dbcred.php";
$dbh = testdb_connect ();

/* Obliterate bad input */


$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade)                VALUES('$_POST[reguser]','$_POST[regpass]','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");

echo "Thanks for signing up!";

?>

3 个答案:

答案 0 :(得分:4)

您需要在查询中放置$secpass的引号:

$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade)                VALUES('$_POST[reguser]','$secPass','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");

仅供参考,您的代码存在很多其他问题。最大的问题是盐应该是随机的。您可以将其存储在密码旁边的数据库中,但每个密码使用不同的随机盐会大大减少彩虹表的使用。

其次,这是一个更大的问题,您需要使用mysql_real_escape_string()转义变量或将数据库访问转换为使用PDO。否则,你将以SQL注入攻击的形式向自己敞开心扉。

答案 1 :(得分:2)

排队

$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade)                VALUES('$_POST[reguser]',$secPass,'$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");

你忘记了$ secPass附近的报价。 试试这段代码:

$newStudent = $dbh->exec ("INSERT INTO Student (uname, pass, fname, lname, email, currGrade)                VALUES('$_POST[reguser]','$secPass','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')");

答案 2 :(得分:1)

您没有在查询中将$ secPass放在引号中。 md5只返回一个字符串,因此如果要将其存储在字符串字段中,则应将其放在引号中。