只是一个超级简单的框架框架内的简单用户身份验证解决方案,开箱即用(并带有自动安装程序),使用 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 等,那么它会更简单、更干净、更高效。简单地使用 Laravel、Symfony 或 Zend 会更快。
然而,以下是社区建议的可能功能,取自大量票证。请随意将它们实施到您的项目分支中:
该项目的 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上写博客。