我目前有一個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