luk*_*uke 0 php mysql security sql-injection login
这个登录系统安全吗?
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);}
Run Code Online (Sandbox Code Playgroud)
如果不是,我怎么能让它安全?
我哈希密码但我知道md5可以解密但是sha1也可以.还mysql_close()需要吗?
小智 5
加盐到你的哈希.这可以是随机字符串,用户名,帐户创建时间戳或几乎任何你喜欢的,只要每次给定用户登录时它都是相同的.目的是首先打破彩虹表(常见的长列表)已经md5加密的密码),其次,将熵添加到通常的短密码.
$pass = $_POST['pass'];
$salt = "7y9fhu8a"
$secure_pass = md5( $pass . $salt );
Run Code Online (Sandbox Code Playgroud)
其次,您没有清理用户名输入.您可以在用户名中添加mysql_real_escape_string以防止sql注入攻击.
$query = "SELECT * ".
"FROM $auth_mysql_table ".
"WHERE user='" . mysql_real_escape_string($user) . "'";
$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
还有其他方法来消毒用户输入,但这是快速和肮脏的.至于mysql_close,我不会打扰.如果您需要运行任何其他查询,则需要重新打开连接.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |