这个登录系统安全吗?
if ($_POST[$submit]){
$user = $_POST[$user];
$pass = $_POST[$pass];
if ($user && $pass){ //if user and pass is enterered
require("vars.php"); //require MySQL conection settings
mysql_connect($auth_mysql_server, $auth_mysql_user, $auth_mysql_pass); //connect to MySQL
mysql_select_db($auth_mysql_db); // select MySQL database
$pass = md5($pass); // hash password
$query = mysql_query("SELECT * FROM $auth_mysql_table WHERE user='$user'"); // run query
$numrows = mysql_num_rows($query);
if ($numrows == 1){ //check if user exists
$row = mysql_fetch_assoc ($query);
$dbid = $row[$auth_mysql_id_row];
$dbuser = $row[$auth_mysql_user_row];
$dbpass = $row[$auth_mysql_pass_row];
if ($pass == $dbpass){ // if password is equal to the one in the database start session
session_start();
//set session information
$_SESSION['user'] = $dbuser;
header("Location:$auth_loggedin"); // goto logged in page
}
else return (3);
}
else return (2);
mysql_close(); // close MySql connection
}
else return (1);}如果不是,我如何保证它的安全呢?
我对密码进行了哈希处理,但我知道md5是可以解密的,但是sha1可以是too.Also,需要mysql_close()吗?
发布于 2012-02-25 07:45:23
不,它不安全。您正在向sql注入攻击敞开大门。想象一下,如果有人在您的用户输入字段(进入$_POST$user)中输入以下内容,会发生什么情况
a'; drop table user; select '1'='1这将产生如下的sql语句:
SELECT * FROM $auth_mysql_table WHERE user='a'; drop table user; select '1'='1'您将对您的数据库执行的。那太糟糕了!
你需要清理你的输入。请阅读:http://php.net/manual/en/security.database.sql-injection.php
编辑:relevant
发布于 2012-02-25 08:01:05
在你的哈希表中加入盐。这可以是一个随机字符串,用户名,帐户创建的时间戳,或者几乎任何你喜欢的东西,只要每次给定用户登录时都是相同的。其目的是首先,打破彩虹表(已被md5加密的常见密码的长列表),其次,为通常较短的密码增加熵。
$pass = $_POST['pass'];
$salt = "7y9fhu8a"
$secure_pass = md5( $pass . $salt );其次,你没有清理你的用户名输入。您可以将mysql_real_escape_string添加到您的用户名以防止sql注入攻击。
$query = "SELECT * ".
"FROM $auth_mysql_table ".
"WHERE user='" . mysql_real_escape_string($user) . "'";
$result = mysql_query($query);还有其他方法可以清理用户输入,但这是快速和肮脏的。至于mysql_close,我不会费心去做的。如果您需要运行任何其他查询,则需要重新打开连接。
发布于 2013-04-24 17:01:11
不不安全。
您需要清理您的用户输入,或者(甚至更好)使用绑定变量。对于PHP,您可以使用PDO:PHP PDO prepared statements
此外,无盐md5是用于散列密码的糟糕的选择,并且没有提供真正的安全性。加盐的md5只是稍微好一点(但仍然属于糟糕的类别)。
您应该:
https://stackoverflow.com/questions/9439636
复制相似问题