我目前有一个PHP登录系统,它通过验证用户输入的组织代码进行登录,因此查询的数据库将会不同。如何以更安全的方式检查PHP会话?
includes.php
<?php
mysql_connect("mysql.example.com", $dbconn, "MySecurePassword");
mysql_select_db($dbconn);
?>
login.php
// $org is the Organisation Code, will be set when user clicks Login
$dbconn = $org;
include "includes.php";
// Omitted the $userid & $pw variables, assume there is no error, and that MySQL Injection is prevented already
$query = "SELECT * FROM `Login` WHERE `userid`=TRIM('$userid') AND `password`=TRIM('$pw')";
$result = mysql_query($query);
if(mysql_num_rows($result)>0){
session_start();
$_SESSION['logged_in'] = $username;
header("Location: loggedinpage.php");
}
loggedinpage.php
<?php
session_start();
// As there is no fixed database, I've omitted the DB Connection
define('DS', TRUE); // used to protect includes
define('USERNAME', $_SESSION['logged_in']);
define('SELF', $_SERVER['PHP_SELF']);
// Checks if user is logged in
if (!USERNAME) {
header("Location: login.php");
}
?>
保障措施采取
密码使用SHA-512进行散列处理,而不是以纯文本形式存储。
MySQL的注射用
mysql_real_escape_string()
我省略为便于一些代码来阅读阻止,我可以知道,如果用户登录检查的方式是安全的?如果不是,我该如何改进?
在此先感谢!
- 更新的问题,以反映的意见更新
这几乎是如何完成的。你可以代替'SELECT *',运行'SELECT 1'。那么你没有检索数据库信息,因为你没有使用它。也可以使用'mysql_'函数退出,改为使用'mysqli_'。并且不要忘记逃避所有的用户输入。 – Phiter
一个主要的方法是切换到使用参数化查询 –
检测用户是否安全登录的方式?谢谢! – Panda