簡體   English   中英

在php應用程序中驗證用戶身份的最佳安全方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM