[英]best and secure way to authenticate user in php application
我需要知道我在php應用程序中使用的用戶身份驗證代碼的安全性。
這是我的登錄檢查功能
// Is Login
//*********************************************************************************
public function isLogin()
{
$validation = new Validation();
if(!$validation->isEmpty($_SESSION["AdminId"]) && !$validation->isEmpty($_SESSION["AdminUsername"]) && !$validation->isEmpty($_SESSION["AdminName"]))
{
return true;
}
else
{
return false;
}
}
我有一個身份驗證文件,我從每個用戶帳戶頁面的頂部調用該文件,如下所示
if (!$admin->isLogin())
{
header("Location: index.php?type=warning&msg=" .urlencode(ADMIN_INVALID_LOGIN));
exit();
}
會話值,例如Adminusername是admin的實際用戶名,adminname是admin的字母名稱,adminid是mysql表中的記錄ID,例如$ _SESSION [“ Adminusername”] =管理員,盡管我在加密后存儲此值它。
我需要知道這是只存儲值並檢查它們的安全方法,還是我需要某種高級功能來使其更安全,例如鹽或時間檢查等。
非常感謝您的建議和反饋。 如果可能,請驗證代碼/類。
提前致謝。 阿瑪迪普·辛格
使用會話重新生成ID在每個請求中獲取新ID,因此您可以防止會話劫持..閱讀本手冊: http : //php.net/manual/zh/function.session-regenerate-id.php
我在加密后存儲此值
我不明白...為什么您要加密AdministratorName?
如您所知,用戶無法按自己的意願操作會話,因為該會話位於serverSide上,並且您的代碼決定將什么內容寫入會話數據。 我認為,加鹽或時間檢查不會提高您的安全級別。
由於HTTP是無狀態的,因此每個會話都由一個ID標識,該ID主要保存在客戶端的Cookie中。 您對此服務器的每個請求均包含此SID,因為這是服務器識別訪問者的唯一方法。
如果使用HTTP傳輸,則數據(也包括SID)也將通過Internet發送,而不會進行加密。 因此,黑客可以讀取您的SessionID並接管您的會話(其中包含已登錄的用戶數據)。 為防止這種情況,您可以為登錄的用戶強制進行HTTPS連接。
如果可以將所有頁面切換為僅https,請執行此操作。 如果必須在http和https之間切換(例如,僅當用戶登錄時才使用https),因此很難保證安全性!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.