請注意,該項目不再積極維護。
這個專案最初是我參加的一些 PHP 課程的一個簡單的學校作業。然後我正在製作的一些網站需要這種系統,並決定開始擴展。警告:這個項目是/將會非常固執己見,這意味著我只會添加我自己認為有用或足夠有趣的功能來開發。
password_hash()
函數對密碼進行雜湊和加鹽處理。使用者名稱儲存為純文字。PASSWORD_DEFAULT
,在撰寫本文時它使用 BCRYPT。又名“為什麼有這麼多文件?”
管理面板將在這裡。與許多其他 Web 應用程式(如 WordPress)類似,可以透過輸入[host]/admin輕鬆存取管理面板。
此資料夾包含兩個用於設定一些配置選項的檔案。更多資訊如下。
只是 UI 的一些 CSS 好東西。
自動安裝程式位於此處。
此資料夾包含使用者介面工作所需的所有 .js 檔案。
該資料夾包含系統的主幹。它具有用於連接資料庫、登入和登出、註冊/建立新帳戶以及修改現有帳戶的 .php 檔案。還有scripts.js,它為使用者介面提供了一些通用的JavaScript 功能。您需要將資料庫資訊插入credentials.php中,請檢查下面的設定部分以取得協助。
在使用它之前您應該閱讀本文。這只是一個普通的麻省理工學院許可證。
這個文件。
這是帳戶管理頁面。用戶可以在這裡更改他們的用戶名和密碼。
該文件僅用於演示。使用者只有登入後才能存取此頁面。
我對使用 Bootstrap 建立簡單登入表單的看法。請隨意修改它以滿足您的需求。
我對使用 Bootstrap 建立簡單的註冊表單的看法。請隨意修改它以滿足您的需求。
自動安裝程式使用它在安裝完成後將其刪除。
這是最常見的英語單字的列表。它由用戶名建議者使用。您可以用您自己的 .txt 檔案替換該清單。清單中的每個單字後面都需要換行。
請注意,配置選項可能會變更。經常回來查看。
如果您檢查 /config 資料夾,您會發現那裡有兩個不同的檔案。什麼給?主要設定檔是config.php 。它包括在伺服器層級強制執行的設定。您應該主要編輯此文件。
如果您也在使用我提供的前端使用者介面,那麼您可以/也必須編輯config.js ,您可以在其中管理一般使用者的外觀。請記住,這些設定僅適用於客戶端,不會以任何方式強制執行,因此使用者可以對其進行編輯。
選項名稱 | 描述 | 預設值 | 支援的值 |
---|---|---|---|
$disableUserSelfRegistration | 阻止用戶註冊 | 錯誤的 | 布林值 |
$使用者名稱最小長度 | 允許的最短用戶名 | 3 | 1-> |
$使用者名稱最大長度 | 允許的最長用戶名 | 30 | 1-> |
$passwordMinLength | 密碼的最小長度 | 8 | 1-> |
$使用者名稱RegExp | 所有使用者名稱必須符合此正規表示式 | 任何正規表示式 | |
$passwordRegExp | 所有密碼必須與此正規表示式匹配 | 任何正規表示式 | |
$newAccountAccessLevel | 對於建立您的第一個管理員帳戶很有用 | “用戶” | “使用者”、“管理員” |
$調試模式 | 允許您停用資料庫連線(僅用於調試) | “不” | “不” |
$debugAdmin用戶名 | 允許您在調試模式下登錄 | “行政” | 任何字串 |
$debugAdmin密碼 | 允許您在調試模式下登錄 | ”” | 任何字串 |
$debugSkipInstall | 這僅用於調試目的 | 錯誤的 | 錯誤的 |
$超時 | 註銷使用者所需的不活動時間(以秒為單位) | 900 | 任意整數 |
$adminPanel超時 | 從管理面板中註銷使用者所需的不活動時間 | 450 | 任意整數 |
$errorMessages | 顯示更詳細的錯誤訊息。 | 預設 | “預設”、“詳細” |
$allow使用者名稱更改 | 用戶是否可以更改他們的用戶名 | 真的 | 布林值 |
$forceHTTPS | 將所有非 HTTPS 連線重新導向到 HTTPS 並傳送 HSTS | 錯誤的 | 布林值 |
2019 年,在處理任何類型的敏感資訊(如密碼)時不使用 HTTPS 被認為是一個巨大的安全風險。這就是為什麼強烈建議僅使用支援它的託管解決方案並將此選項更改為 true。如今,您甚至可以從 Let's Encrypt 完全免費獲得 SSL 證書,因此沒有理由不使用它。然而,在某些(配置錯誤的)環境中,即使實際上使用了 HTTPS,也未定義 SERVER["HTTPS"] 超級全域。這會導致重定向的無限循環。我自己也是經歷了慘痛的教訓才知道這一點的。
選項名稱 | 描述 | 預設值 | 支援的值 |
---|---|---|---|
停用用戶自行註冊 | 停用與註冊相關的任何 UI 元素 | 錯誤的 | 真,假 |
使用者名稱最小長度 | UI 接受的最短用戶名 | 3 | 1-> |
使用者名稱最大長度 | UI 接受的最長用戶名 | 30 | 1-> |
密碼最小長度 | UI 接受的最短密碼 | 8 | 1-> |
使用者名稱規則 | 如果使用者名稱與 regExp 不匹配,則顯示此字串 | 任何字串 | |
密碼規則 | 如果密碼與 regExp 不匹配,則顯示此字串 | 任何字串 | |
啟用使用者名稱建議 | 允許您停用或啟用使用者名稱建議 | 真的 | 布林值 |
允許使用者名稱更改 | 用戶是否可以更改他們的用戶名(僅限 UI) | 真的 | 布林值 |
啟用登入訊息 | 在登入頁面上顯示任何訊息 | 錯誤的 | 布林值 |
登入留言 | 定義當enableLoginMessage為true時顯示的訊息 | ”” | 任何字串 |
如前所述,您需要一個 MySQL 資料庫。這個資料庫不需要太多空間(除非您有很多用戶)並且任何相當新的 MySQl 版本都應該可以工作。您可以手動設定資料庫並建立管理員帳戶,也可以使用我的自動安裝程式。
在安裝的第一步中,安裝程式需要將檔案寫入主機的磁碟機。如果您沒有適當的權限,則必須手動進行安裝。請參閱下面的說明。
users
: username
、 password
、 accessLevel
、 lastLogin
和rememberMeToken
。使用 CHAR 等字串資料型別。我個人喜歡使用VARCHAR。對於lastLogin
我推薦 INT(11)。我還會添加一個自動遞增 id 欄位作為主鍵,但這不是嚴格要求的。如果您使用 VARCHAR 或其他具有不同最大字串長度的資料類型,則下表將很有用。
場地 | 所需長度(最小) |
---|---|
使用者名稱 | 與 config.php 中的 $usernameMaxLength 相同 |
密碼 | 為了安全起見,我建議使用 255(因為 PHP 的預設加密方法可能會改變) |
訪問級別 | 5 |
最後登入 | 11 |
記住我的令牌 | 255 |
別擔心,類似這樣的事情應該可以滿足您的需求:
CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR ( 64 ) NOT NULL UNIQUE,
password VARCHAR ( 255 ) NOT NULL ,
accessLevel VARCHAR ( 10 ) NOT NULL ,
lastLogin INT ( 11 ),
rememberMeToken VARCHAR ( 255 )
);
設定資料庫後,您需要建立第一個管理員帳戶。有兩種方法可以做到這一點:
admin
和隨機產生的密碼來建立一個具有管理員權限的新帳戶。 (如果您遵循上面的 SQL 範例並將 UNIQUE 約束設定為使用者名字段,那麼如果該帳戶已存在,則不會建立該帳戶。您不會收到錯誤訊息)建立管理員帳戶後,您必須刪除(或重新命名)/install 資料夾。最後,登入新建立的帳戶並使用帳戶管理頁面變更密碼。或者
$newAccountAccessLevel
更改為“admin”,然後使用正常的註冊表單建立新帳戶。您需要刪除 /install 資料夾才能存取登入頁面。請記住隨後將值變更回“user”。重要的!我再次提醒您,在實際生產環境中使用它之前,您必須刪除 /install 資料夾。否則任何人都可以看到您的資料庫憑證!
設定後,您可以使用管理面板建立新帳戶(管理員或普通帳戶)。
這意味著安裝程式註意到函數random_bytes(int)
不存在或無法正常運作。如果您使用的 PHP 版本早於 7.0,則必須使用實作該功能的第 3 方函式庫。對於 PHP 5.x,我推薦這個。
MySQL 預設為 3306。
當嚮導無法自行刪除時,就會發生這種情況。這通常是由主機上的某些限制性權限引起的。透過手動刪除 /install 資料夾來修復問題。
請參閱下面一般常見問題中的故障排除提示。
管理面板正處於開發的早期階段。很多東西可能會被破壞。
未來還會增加更多內容。
/行政
更仔細地閱讀 config.php。
這意味著嘗試連接資料庫時發生了PDOException
。您可以在/config/config.php中開啟更詳細的錯誤訊息。最常見的原因是:
PDO_MYSQL
驅動程式不可用或設定不正確。PDO_MYSQL
。不,事實並非如此,而且這種情況已經持續太久了,我知道。我打算很快就去實現它™。更新:現在正在運行。請注意,它只記住登入資訊 30 天(出於安全原因)。
是的,我知道實施類似的措施總是會帶來新的安全漏洞。但是,我不會強迫用戶使用它或任何東西。如果使用者未選取該複選框,則不會建立存取令牌,因此該使用者不存在安全風險。
random_bytes()
函數為該使用者建立新令牌。該令牌將保存到資料庫中,並將兩個 cookie 傳送到瀏覽器。第一個 cookie 的值是純文字形式的使用者使用者名稱。第二個 cookie 更為重要。它的價值是創建的令牌。主要問題是,如果「壞人」能夠以某種方式存取使用者的令牌,他們就可以輕鬆偽造 cookie 並以該使用者身分登入。壞人有兩種方法可以存取使用者的令牌:透過某種方式(例如 SQL 注入)從資料庫取得令牌或竊取使用者的 cookie 和/或其值。
我認為這是一個安全風險,因為有些人會傾向於使用過於簡單或相同的密碼。但是,我可能會在未來的版本中透過配置選項允許這樣做。