PHP 5.5 以降の将来性のある公式 bcrypt パスワード ハッシュ/ソルティング実装を使用した、すぐに使用できる (自動インストーラーが付属している) 超シンプルなフレームワーク スケルトン内のシンプルなユーザー認証ソリューションです。アイデアから最初に使用可能なプロトタイプ アプリケーションまでの時間を大幅に短縮するいくつかの優れた機能。それ以上は何もありません。このプロジェクトは、徹底的なシンプルさに重点を置いています。すべてが可能な限りシンプルで、小規模なプロジェクト、一般的な代理店業務、素早いドラフト向けに作られています。最新のフレームワークが持つすべての機能を備えた大規模な企業アプリケーションを構築したい場合は、Laravel、Symfony、または Yii を検討してください。しかし、単に動作するものを手早く作成したい場合は、このスクリプトが興味深いかもしれません。
HUGE の可能な限りシンプルなアーキテクチャは、巨大なアプリケーションに関するいくつかのカンファレンスの講演、スライド、記事からインスピレーションを得たもので、驚くべきことに意図的にプログラミングの基本に立ち返り、手続き型プログラミング、静的クラス、極めて単純な構造、完全に DRY ではないものを使用しています。コードなどを非常に読みやすく保ちながら (StackOverflow、Wikipedia、SoundCloud)。
この文脈における興味深い流行語: KISS、YAGNI、Feature Creep、Minimum viable product。
このプロジェクトを安定、安全、クリーンかつ最小限に保つために、HUGE の開発を最小限に抑えることにしました。心配しないでください。これは実際には良いことです。新機能は通常、新しいバグ、多くのテスト、修正、非互換性を意味し、一部の人にとっては深刻なアップデートのストレスさえも意味します。 HUGE はセキュリティ クリティカルなスクリプトであるため、新しい機能は安定した安全なコアほど重要ではありません。これが、人々が HUGE を使用する理由です。これはつまり:
そして、正直に言うと、めったにない自由時間にフレームワークを無料で維持することも、私が永続的にやりたいことではありません。 :)
最後にちょっとした注意点: PHP の世界は劇的に進化しており、素晴らしい機能を備えた優れたフレームワークと大きな専門チームが背後にあり、非常によく書かれたドキュメントと大規模なコミュニティがあるため、別のフレームワークに多くの労力を費やす理由はまったくありません。代わりに、人気のあるフレームワークにコミットしてください。そうすれば、あなたの作品はより多くの影響力を持ち、より多くの人に使用されるようになります。
このプロジェクトに携わった皆さんに感謝します。素晴らしい時間をお過ごしください。 XOXO、クリス
2010/2011 年当時、PHP の世界には、少なくとも非専門家にとっては有用なログイン ソリューションはありませんでした。そこで私は、若い開発者なら誰もが犯す最悪の間違いを犯してしまいました。それは、セキュリティの基本についてまったく理解せずに、自分で何かを構築しようとするというものでした。さらに悪いことに、Web にはユーザー認証システムの構築に関する完全に壊れたチュートリアルが溢れており (そして今でも)、世界最大の企業でさえこれを完全に間違っていました (ここでは SONY、LinkedIn、Adobe について話しています)。また、すべての主要なプログラミング言語 (!) の多くの主要なフレームワークでは、完全に時代遅れで安全でないパスワード保存テクノロジが使用されていました。
しかし、2012 年にセキュリティ専門家の Anthony Ferrara が小さな PHP ライブラリを公開しました。これにより、PHP 5.3 および 5.4 で非常に安全で最新の正しいパスワードのハッシュ化が可能になり、セキュリティの内部構造に関する知識がなくても、すべての開発者がストレスなく使用できるようになりました。このスクリプトは非常に優れていたため、PHP 5.5 のコアに組み込まれ、現在では事実上の標準となっています。
これが発表されたとき、私はこのネイキッド ライブラリを使用して、いくつかのプライベートおよび商用プロジェクト用にすぐに使える完全に機能するログイン システムを構築し、そのコードを GitHub に公開しようとしました。多くの人がこれが便利だと感じ、プロジェクトに貢献してバグ修正し、フォークや小規模バージョンと大規模バージョンを作成しました。その結果がこのプロジェクトです。
注意してください: 2015 年の現在、ほとんどの主要なフレームワークには、デフォルトで優れたユーザー認証ロジックが組み込まれています。何年も前にはそんなことはありませんでした。したがって、今日の観点からすると、本格的なプロジェクトには Laravel、Yii、または Symfony を選択する方が賢明かもしれません。ただし、HUGE を自由に試してみてください。自動インストーラーは、構成を必要とせずに、数分以内に完全に動作するインストールを起動します。
そしてなぜ「HUGE」という名前なのでしょうか?これは、私の他の古いプロジェクトの TINY、MINI、MINI2、MINI3 との素晴らしい組み合わせです。シンプルな Web サイトを非常に高速かつシンプルに開発するための超最小限のマイクロ フレームワーク。
古い 3.0 バージョンのライブデモはこちら、サーバーの phpinfo() はこちらをご覧ください。
このプロジェクトの背後には多くの作業があります。数百時間、おそらくは数千時間の作業を節約できるかもしれません (開発者のコストで計算します)。したがって、HUGE を使用してお金を稼いでいる場合は、公平を期し、オープンソースに何かを還元してください。 HGE は個人利用でも商用利用でも完全に無料です。
DigitalOcean でサーバーをレンタルするか、BuyMeACoffee.com でコーヒーをチップするだけでプロジェクトをサポートできます。ありがとう! :)
こちらのプロジェクトにもぜひご参加ください。
MIT の下でライセンスを取得しています。個人プロジェクトでも商用プロジェクトでも完全に無料です。
オブジェクト指向プログラミングと 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
実行して依存関係をインストールします。「電子メールが機能しません」?以下のトラブルシューティングを参照してください。 TODO
これは、開発環境を簡単にセットアップするための簡単なガイドラインにすぎません。
Apache、PHP 5.5+、および MySQL がインストールされていることを確認してください。チュートリアルはこちら。 Nginx も確実に動作しますが、インストール ガイドラインはまだありません。
vhost を編集してクリーンな 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 は https のみであるため、GitHub からクローンを作成するために必要)、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 clone 巨大
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>
オリジナルのチケットはこちらからご確認ください。
デフォルトでは、通常ユーザーと管理者ユーザーの 2 人のデモ ユーザーが存在します。詳細については、この Readme 内の小さなドキュメント ブロックのユーザー ロールの部分をご覧ください。
通常ユーザー: ユーザー名はdemo2
、パスワードは12345678
です。ユーザーはすでにアクティブ化されています。管理者ユーザー (他のユーザーを削除および一時停止できます): ユーザー名はdemo
、パスワードは12345678
です。ユーザーはすでにアクティブ化されています。
プロジェクトのルート フォルダーには、迷惑となる可能性のあるファイルがいくつかあります。
READMEとCHANGELOG は一目瞭然です。
実際のドキュメントは現在作成中です。それまでは、コードを見て、IDE のコード補完機能を使用して、物事がどのように機能するかを理解してください。コントローラー ファイル、モデル ファイル、およびビュー ファイルでのデータの表示方法を見ると、それは非常に明白です。まだドキュメントがないのが大変残念ですが、時間はめったにないので、私たちは皆、自由時間に無料でこれを行っています :)
現在、ユーザーには通常ユーザーと管理者の 2 種類があります。全く同じものもありますが…
管理者ユーザーは他のユーザーを削除したり一時停止したりできます。ナビゲーションには追加のボタン「管理者」があります。管理者ユーザーのデータベース テーブル フィールドuser_account_type
内の値は7
です。アカウントをアップグレードまたはダウングレードすることはできません (これでは意味がありません)。
通常のユーザーには管理機能がありません。ただし、アカウントをアップグレードおよびダウングレードすることはできます (/user/changeUserRole 経由で試してください)。これは基本的に、ベーシック ユーザー / プレミアム ユーザーの概念の非常にシンプルな実装です。通常のユーザーは、データベース テーブルのフィールドuser_account_type
内に1
または2
の値を持ちます。デフォルトでは、すべての新規登録ユーザーはユーザー ロール 1 を持つ通常のユーザーになります。
詳細については、この Readme の「デモ ユーザーによるテスト」セクションを参照してください。
ユーザー ロールとユーザー権限を追加する非常に興味深いプル リクエストもありますが、これは高度で複雑すぎるため、プロジェクトには統合されていません。しかし、これはまさにあなたが必要としているものかもしれませんので、お気軽にお試しください。
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 つの主要なルールがありました。あなたにとっても役立つかもしれません:
この README の冒頭で述べたように、KISS、YAGNI、Feature Creep、Minimum viable product など、素晴らしいものを開発するときに役立つ可能性のある強力な概念もいくつかあります。
私たち全員にとって不必要な作業を避けるために、既存の機能のみを必要とする単純なプロジェクトには HUGE を使用することを強くお勧めします。RESTful アーキテクチャ、移行、ルーティング、2FA などが本当に必要な場合は、HUGE の方が簡単でクリーンで、 Laravel、Symfony、または Zend を使用する方が速いです。
ただし、多くのチケットから抜粋した、コミュニティが提案した可能な機能を以下に示します。プロジェクトのフォークに自由に実装してください。
このプロジェクトの v1 と v2 には 2 つ (!) のサポート フォーラムがあり (巨大なものは v3)、どちらも Readme やインストール ガイドラインを読まなかった人々によって荒らされました。最も多く寄せられた質問は、「スクリプトが機能しません、助けてください」というもので、有益な情報 (コードやサーバーの設定、使用されているバージョンなど) は何も提供されませんでした。私がこれらの行を書いているときに、誰かが Twitter 経由で「Composer を使用せずにインストールする方法」を尋ねました。私が言いたいことはわかります:) - 人々がガイドラインを読んで、自分で最小限の調査をし、物事を不必要に複雑にするのをやめたなら、質問の99%は必要ありませんでした。そして、詳細な回答を書いているときでさえ、ほとんどの人は依然としてそれを台無しにし、その結果、暴言や苦情が発生しました(無料ソフトウェアの無料サポートのために!)。これに毎日対処するのはイライラするばかりでした。特に、すべての「助けてください」リクエストに対して、詳細かつ無料で個人的なサポートを提供するのがオープンソース開発者の義務であると人々が完全に当然のことと考えている場合にはなおさらです。
そこで、無償サポートを完全に停止することにしました。スクリプト内の実際の問題に関する深刻な質問については、GitHub の問題機能を使用してください。
厳しい言葉ですが、最近では基本的にあらゆる公共インターネット プロジェクトが非常に奇妙な人々によって嫌がらせ、破壊、荒らしを受けているため、これが必要です。いくつかの簡単なルールです。
これは、無償のボランティアが自由時間に書いた単純なスクリプトであることを尊重してください。これは 10,000 ドルで購入したビジネス ソフトウェアではありません。無料のオープンソース ソフトウェアについては、文句を言う理由はありません (!)。最近のフリー ソフトウェアに対する態度は実に苛立たしいもので、人々はその裏で行われている仕事や、本格的なソフトウェアを完全に無料で手に入れて数千ドルを節約できるという事実を知らずに、すべてを当然のことと考えています。気に入らない場合は使用しないでください。機能が必要な場合は、そのプロセスに参加してみてください。場合によっては自分で構築してプロジェクトに追加することもできます。優しく、敬意を持って接しましょう。建設的な批判はいつでも大歓迎です!
バッシングしないでください、嫌悪感を抱かないでください、スパムを送信しないでください、破壊行為をしないでください。個人的な無料サポートを求めたり、誰かが代わりに仕事をしてくれるかどうか尋ねたりしないでください。何かを質問する前に、必ず README を読み、すべてのチュートリアルに従い、コードを再確認し、自分で問題を解決してみてください。
荒らしや非常に迷惑な人は永久禁止/ブロックされます。 GitHub には非常に強力な不正行為防止チームがいます。
開発ブランチのみでコミットしてください。 masterブランチには常に安定バージョンが含まれます。
Scrutinizer (マスター ブランチ)、Scrutinizer (開発ブランチ)、Code Climate、Codacy、SensioLabs Insight。
公開されているオープンソース プロジェクトでバグを公開すると起こり得る結果を考慮して、本当に大きなバグがある場合は、ここには投稿せずに私の電子メール アドレスに送信していただきますようお願いいたします。バグが攻撃者にとって興味のない場合: 通常の GitHub 問題を自由に作成してください。
ここで現在進行中の問題を確認してください: https://github.com/panique/huge/issues?state=open
興味深い問題: ユーザーが Web サイトにアクセスすると、ユーザーのブラウザも 1 つ以上 (!) のファビコン (さまざまなサイズ) を要求します。これらの静的ファイルが存在しない場合、アプリケーションはファイルごとに 404 応答と 404 ページの生成を開始します。これはサーバーの電力を大量に浪費するだけでなく、役に立たないため、常にファビコンがあることを確認するか、Apache/nginx レベルでこれを処理するようにしてください。
HUGE は、 view/_templates/header.php の先頭に空の画像を送信することでこれを処理しようとします。
このチケットの詳細: favicon.ico が見つからない、画像が見つからないなどの場合は、適切な 404 を返します。
Stackflow の詳細はこちら: favicon.ico リクエストを防ぐ方法、小さな favicon がさらに別の HTTP リクエストを必要とするのはばかげていませんか?ファビコンをスプライトに入れるにはどうすればよいですか?
Dev Metalでもブログを書いています。