只是一個超級簡單的框架框架內的簡單用戶身份驗證解決方案,開箱即用(並帶有自動安裝程序),使用 PHP 5.5+ 的面向未來的官方 bcrypt 密碼哈希/加鹽實現,加上一些不錯的功能將大大加快從想法到第一個可用原型應用程式的時間。而已。該專案的重點是核心簡單性。一切都盡可能簡單,專為較小的專案、典型的代理工作和快速草稿而設計。如果您想建立具有現代框架所有功能的大型企業應用程序,那麼可以看看 Laravel、Symfony 或 Yii,但如果您只是想快速創建可以正常工作的東西,那麼這個腳本可能對您來說很有趣。
HUGE 的盡可能簡單的架構受到了一些關於大型應用程式的會議演講、幻燈片和文章的啟發,這些應用程式令人驚訝且有意地回歸到程式設計的基礎知識,使用流程程式設計、靜態類別、極其簡單的建構、不完全DRY程式碼等,同時保持程式碼極具可讀性(StackOverflow、Wikipedia、SoundCloud)。
在這方面有一些有趣的流行語:KISS、YAGNI、功能蔓延、最小可行產品。
為了保持這個專案的穩定、安全、乾淨和最小化,我決定將 HUGE 的開發減少到最低限度。別擔心,這實際上是一件好事:新功能通常意味著新的錯誤、大量的測試、修復、不相容性,對某些人來說甚至意味著硬核更新壓力。由於 HUGE 是一個安全關鍵的腳本,新功能並不像穩定和安全的核心那麼重要,這就是人們使用它的原因。這意味著:
而且說實話,在我難得的空閒時間免費維護一個框架也不是我想要永久做的事情。 :)
最後一點說明:PHP 世界已經發生了巨大的發展,我們擁有出色的框架,具有出色的功能和強大的專業團隊,編寫非常好的文檔和大型社區,因此根本沒有理由在另一個框架上投入大量工作。相反,請致力於流行的框架,那麼你的工作將會產生更大的影響並被更多的人使用!
感謝參與此計畫的所有人,祝您度過愉快的時光! XOXO,克里斯
早在 2010/2011 年,PHP 世界就沒有有用的登入解決方案,至少對非專家來說是如此。所以我犯了每個年輕開發人員都會犯的最嚴重的錯誤:嘗試自己建立一些東西,而不了解任何安全基礎知識。更糟的是:網路過去(現在)充滿了關於建立用戶身份驗證系統的完全損壞的教程,即使是世界上最大的公司也完全錯誤地做到了這一點(我們在這裡討論的是索尼、LinkedIn 和Adobe),並且所有大型程式語言中的許多主要框架(!)都使用了完全過時且不安全的密碼保存技術。
然而,2012 年,安全專家Anthony Ferrara 發布了一個小型PHP 庫,允許在PHP 5.3 和5.4 中對密碼進行極其安全、現代且正確的哈希處理,每個開發人員都可以毫無壓力且無需了解安全內部知識即可使用。該腳本太棒了,以至於它被寫入 PHP 5.5 的核心,它是當今事實上的標準。
當這個出來時,我嘗試使用這個裸庫為幾個私人和商業專案建立一個完全可用的開箱即用的登入系統,並將程式碼放在 GitHub 上。很多人發現這很有用,為該專案做出了貢獻並修復了錯誤,製作了分叉、更小和更大的版本。結果就是這個專案。
請注意:現在,2015 年,大多數主要框架都預設嵌入了出色的使用者身份驗證邏輯。幾年前並非如此。因此,從今天的角度來看,對於嚴肅的專案選擇 Laravel、Yii 或 Symfony 可能更明智。但請隨意嘗試 HUGE,自動安裝程式將在幾分鐘內啟動完全正常工作的安裝,無需任何配置。
為什麼叫「巨大」?它是 TINY、MINI 和 MINI2、MINI3 的一個很好的組合,這些是我的其他一些較舊的項目。超最小的微框架,用於極其快速、簡單地開發簡單網站。
請在此處查看舊 3.0 版本的現場演示,並在此處查看伺服器的 phpinfo()。
這個項目背後有很多工作要做。我可能會為您節省數百甚至數千小時的工作時間(計算開發人員成本)。因此,當您透過使用 HUGE 賺錢時,請公平地回饋開源。 HUGE 對私人和商業用途完全免費。
透過在 DigitalOcean 租用伺服器或在 BuyMeACoffee.com 上給一杯咖啡小費來支援該專案。謝謝! :)
也請隨意為這個項目做出貢獻。
獲得麻省理工學院許可。對於私人或商業項目完全免費。
確保您了解物件導向程式設計和 MVC 的基礎知識,能夠使用命令列並且先前使用過 Composer。該腳本不適合初學者。
喲,全自動的。為什麼 ?因為我總是討厭花幾天時間試圖找出如何安裝一個東西。這將為您節省大量時間和精力。如果您喜歡,請捐贈一杯咖啡。
如果您使用 Vagrant 進行開發,那麼只需
vagrant box add ubuntu/trusty64
vagrant up
操作。5 分鐘後,您將在 Ubuntu 14.04 LTS 中完全安裝 HUGE。完整程式碼將自動與目前資料夾同步。 MySQL root 密碼和 PHPMyAdmin root 密碼設定為12345678 。預設情況下,192.168.33.111 是您的新盒子的 IP。
在全新且裸露的典型 Ubuntu 14.04 LTS 伺服器中進行極為簡單的安裝:
下載安裝程式腳本
wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh
使其可執行
chmod +x bootstrap.sh
運行它!給它一些時間來執行所有任務。是的,您稍後可以感謝我:)
sudo ./bootstrap.sh
Composer install
以安裝依賴項「電子郵件不起作用」?請參閱下面的故障排除。待辦事項
這只是輕鬆設定開發環境的快速指南!
確保已安裝 Apache、PHP 5.5+ 和 MySQL。教程在這裡。 Nginx 也肯定可以工作,但目前還沒有安裝指南。
編輯虛擬主機,使乾淨的 URL 成為可能,並將所有流量路由到專案的 /public 資料夾:
sudo nano /etc/apache2/sites-available/000-default.conf
並使文件看起來像
<VirtualHost *:80>
DocumentRoot "/var/www/html/public"
<Directory "/var/www/html/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
啟用 mod_rewrite 並重新啟動 apache。
sudo a2enmod rewrite
service apache2 restart
安裝curl(需要使用git)、openssl(需要從GitHub克隆,因為github只是https)、PHP GD、圖形庫(我們建立驗證碼和頭像)和git。
sudo apt-get -y install curl
sudo apt-get -y install php5-curl
sudo apt-get -y install openssl
sudo apt-get -y install php5-gd
sudo apt-get -y install git
git克隆巨大
sudo git clone https://github.com/panique/huge " /var/www/html "
安裝作曲家
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
轉到專案資料夾,載入 Composer 套件(--dev 是可選的,你知道怎麼回事)
cd /var/www/html
composer install --dev
執行 SQL 語句。例如,透過 phpmyadmin 或透過命令列。 12345678 是範例密碼。注意,這裡寫的時候沒有空格。
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/01-create-database.sql "
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/02-create-table-users.sql "
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/03-create-table-notes.sql "
使頭像資料夾可寫入(確保它是正確的路徑!)
sudo chown -R www-data " /var/www/html/public/avatars "
如果這對您不起作用,那麼您可以嘗試透過設定替代方法
sudo chmod 0777 -R " /var/www/html/public/avatars "
刪除 Apache 的預設演示文件
sudo rm " /var/www/html/index.html "
在 application/config/config.development.php 中編輯應用程式的設定並輸入您的資料庫憑證。
最後一部分(第一次測試不需要):在同一文件中設定 SMTP 憑證並將 EMAIL_USE_SMTP 設為 true,以便您可以發送正確的電子郵件。強烈建議使用SMTP發送郵件!透過 PHP 的 mail() 進行本機傳送幾乎在所有情況下都不起作用(垃圾郵件攔截)。我使用 SMTP2GO。
然後檢查你的伺服器的IP/網域。一切都應該工作正常。
這是未經測試的 NGINX 設定。如果您發現問題,請在票證上發表評論。
server {
# your listening port
listen 80;
# your server name
server_name example.com;
# your path to access log files
access_log /srv/www/example.com/logs/access.log;
error_log /srv/www/example.com/logs/error.log;
# your root
root /srv/www/example.com/public_html;
# huge
index index.php;
# huge
location / {
try_files $uri /index.php?url=$uri&$args;
}
# your PHP config
location ~ .php$ {
try_files $uri = 401;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
非常感謝 razuro 的精細設定:將其放入根資料夾中,但不要將任何 web.config 放入公共資料夾中。
<?xml version="1.0" encoding="UTF-8"?><configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="public/index.php?url={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
在這裡找到原始門票。
預設有兩個演示用戶,一個普通用戶和一個管理員用戶。有關更多信息,請查看本自述文件中小文檔區塊的使用者角色部分。
普通用戶:用戶名是demo2
,密碼是12345678
。用戶已經被啟動。管理者使用者(可以刪除和暫停其他使用者):使用者名稱是demo
,密碼是12345678
。用戶已經被啟動。
專案的根資料夾中有幾個可能令人困擾的文件:
README和CHANGELOG是不言自明的。
真正的文檔正在製作中。在此之前,請查看程式碼並使用 IDE 的程式碼完成功能來了解其工作原理,當您查看控制器檔案、模型檔案以及資料在視圖檔案中的顯示方式時,這一點非常明顯。非常抱歉,目前還沒有文檔,但是時間很少,我們都在空閒時間免費這樣做:)
目前有兩種類型的使用者:普通使用者和管理員。有完全相同的,但是...
管理員用戶可以刪除和暫停其他用戶,他們在導航中還有一個附加按鈕「admin」。管理員使用者在資料庫表格欄位user_account_type
中的值為7
。他們無法升級或降級他們的帳戶(因為這沒有意義)。
普通用戶肯定沒有管理功能。但他們可以升級和降級他們的帳戶(透過 /user/changeUserRole 嘗試),這基本上是基本用戶/高級用戶概念的超級簡單實現。普通使用者在資料庫表格欄位user_account_type
中的值為1
或2
。預設情況下,所有新註冊用戶都是具有用戶角色 1 的普通用戶。
有關詳細信息,請參閱本自述文件的“使用演示用戶進行測試”部分。
還有一個非常有趣的拉取請求添加用戶角色和用戶權限,由於它太高級和複雜,因此沒有整合到專案中。但是,這可能正是您所需要的,請隨意嘗試。
為了防止 CSRF 攻擊,HUGE 以最常見的方式做到這一點,即在使用者提交關鍵表單時使用安全令牌。這意味著:當PHP 為使用者呈現表單時,應用程式會在表單內放置一個「隨機字串」(作為隱藏的輸入欄位),該字串是透過Csrf::makeToken() (application/core/Csrf .php) 產生的,字串也會將此令牌保存到會話中。提交表單時,應用程式會檢查 POST 請求是否準確包含會話內的表單令牌。
此 CSRF 預防功能目前在登入表單流程(請參閱application/view/login/index.php )和使用者名稱變更表單流程(請參閱application/view/user/editUsername.php )上實現,大多數其他表單不安全-至關重要並且應盡可能保持簡單。
因此,要使用普通表單執行此操作,只需:在表單中的提交按鈕之前放置: <input type="hidden" name="csrf_token" value="<?= Csrf::makeToken(); ?>" />
,在控制器操作中透過執行以下操作來驗證隨表單提交的 CSRF 令牌:
// check if csrf token is valid
if (!Csrf::isTokenValid()) {
LoginModel::logout();
Redirect::home();
exit();
}
非常感謝 OmarElGabry 的實施!
理論上:是的,但是這個功能在我的測試中不起作用。由於它是一項外部功能,請查看相應的票證以了解更多資訊。
有一些很棒的功能或功能創意是由很棒的人構建的,但是這些功能太特別了,無法進入 HUGE 的主版本,但是如果您有興趣,請查看這些門票:
這個專案的想法是提供一個超級簡單的準系統應用程序,內部有一個完整的用戶身份驗證系統,可以正常運作且穩定。由於該腳本與高度安全相關的性質,任何更改都意味著大量的工作、大量的測試、捕獲邊緣情況等,最後我花了 90% 的時間來測試和修復新功能或新功能會破壞現有功能東西,而且這樣做確實不是任何人想在難得的空閒時間免費做的事情:)
為了保持專案穩定、乾淨和可維護,我謹宣布該專案的“軟終止”,意思是:
A. HUGE 將來不會獲得任何新功能,但是...... B. 將會進行錯誤修復和更正,可能需要數年時間
雖然 HUGE 正在開發中,但有 3 個主要規則幫助我(可能還有其他人)編寫最少、乾淨且可工作的程式碼。可能對你也有用:
正如本自述文件的介紹中所述,還有一些強大的概念可能會在開發很酷的東西時幫助您:KISS、YAGNI、功能蔓延、最小可行產品。
為了避免我們所有人不必要的工作,我建議大家在簡單的專案中使用HUGE,只需要現有的功能,如果你確實需要RESTful 架構、遷移、路由、2FA 等,那麼它會更簡單、更乾淨、更有效率。
然而,以下是社區建議的可能功能,取自大量票證。請隨意將它們實施到您的專案分支中:
該專案的 v1 和 v2 有兩個(!)支援論壇(v3 是巨大的),並且兩個論壇都被甚至沒有閱讀自述文件和/或安裝指南的人破壞。最常見的問題是“腳本不起作用,請幫忙”,但沒有提供任何有用的信息(例如程式碼或伺服器設置,甚至使用的版本)。當我寫這些文字時,有人剛剛透過 Twitter 詢問「如何在沒有 Composer 的情況下安裝」。你知道我的意思:) - 如果人們閱讀了指南,自己進行了最少的研究,或者不再讓事情變得如此不必要的複雜化,那麼 99% 的問題都是不必要的。即使在寫出詳細的答案時,大多數人仍然搞砸了,導致咆哮和抱怨(對免費軟體的免費支援!)。每天處理這個問題真是令人沮喪,尤其是當人們完全理所當然地認為開源開發人員有責任為每個「請幫助」請求提供詳細的、免費的和個人的支援時。
所以我決定完全停止任何免費支援。對於有關腳本內部實際問題的嚴重問題,請使用 GitHub 問題功能。
話雖嚴厲,但由於現在基本上每個公共互聯網項目都會受到非常奇怪的人的騷擾、破壞和攻擊,因此有必要:一些簡單的規則。
尊重這只是無償志工在空閒時間編寫的簡單腳本。這不是您花 10,000 美元購買的商業軟體。沒有理由抱怨(!)免費的開源軟體。如今,人們對自由軟體的態度確實令人沮喪,人們認為一切都是理所當然的,卻沒有意識到背後的工作,事實上他們完全免費獲得了嚴肅的軟體,節省了數千美元。如果您不喜歡它,請不要使用它。如果您想要某個功能,請嘗試參與該過程,甚至可以自己建立它並將其添加到專案中!保持友善和尊重。建設性的批評肯定總是受歡迎的!
不攻擊、不仇恨、不發送垃圾郵件、不破壞。請不要尋求個人免費支持,也不要詢問是否有人可以為您做您的工作。在提出問題之前,請確保您已閱讀自述文件,遵循每個教程,仔細檢查程式碼並嘗試自己解決問題。
巨魔和非常煩人的人將被永久禁止/阻止。 GitHub 擁有非常強大的反濫用團隊。
請僅在開發分支中提交。主分支將始終包含穩定版本。
Scrutinizer(主分支)、Scrutinizer(開發分支)、Code Climate、Codacy、SensioLabs Insight。
由於在公共開源專案上發布錯誤時可能產生的後果,我懇請您將非常大的錯誤發送到我的電子郵件地址,而不是在此處發布。如果攻擊者對這個 bug 不感興趣:請隨意建立一個普通的 GitHub 問題。
在此處查看活躍問題:https://github.com/panique/huge/issues?state=open
有趣的問題:當使用者造訪您的網站時,使用者的瀏覽器也會要求一個或多個(!)圖示(不同尺寸)。如果這些靜態檔案不存在,您的應用程式將開始為每個檔案產生 404 個回應和 404 頁面。這會浪費大量伺服器電源,而且毫無用處,因此請確保您始終擁有網站圖示或從 Apache/nginx 層級處理此問題。
HUGE 嘗試透過在 view/_templates/header.php 的頭部發送空圖像來處理這個問題!
此票證中的更多內容:針對遺失的 favicon.ico、遺失的圖像等傳回正確的 404。
有關 Stackflow 的更多信息,請參閱:如何阻止 favicon.ico 請求? ,一個微小的 favicon 需要另一個 HTTP 請求,這不是很愚蠢嗎?如何讓圖示變成精靈?
我還在Dev Metal上寫部落格。