web-dev-qa-db-ja.com

CodeIgniter用の認証ライブラリをどのように選択すればよいですか?

少し があるのがわかります。メンテナンスされていて使いやすいものはどれですか。彼らの長所と短所は何ですか?

388
GavinR

更新(2010年5月14日):

結局のところ、ロシアの開発者イリヤ・コニュホフはこれを読んだ後、ガントレットを手に入れ、以下の推奨事項と要件に従って、DX Authに基づいてCIの新しい認証ライブラリを作成しました

そして、結果の Tank Auth はOPの質問に対する答えのように見えます。ここで四肢に出て、今日のTankIgをCodeIgniterに最適な認証ライブラリと呼びます。それはあなたが必要とするすべての機能を持ち、あなたが必要としない肥大化のない堅実なライブラリです:

タンク認証

長所

  • フル機能
  • 機能セットを考慮した無駄のないフットプリント(20ファイル)
  • 非常に優れたドキュメント
  • シンプルでエレガントなデータベース設計(わずか4つのDBテーブル)
  • ほとんどの機能はオプションであり、簡単に構成できます
  • 言語ファイルのサポート
  • サポートされているreCAPTCHA
  • CIの検証システムへのフック
  • アクティベーションメール
  • メール、ユーザー名、またはその両方でログイン(設定可能)
  • 非アクティブ化されたアカウントの自動有効期限
  • シンプルでありながら効果的なエラー処理
  • ハッシュにphpassを使用します(また、DBの自動ログインコードもハッシュします)
  • セキュリティの質問を使用しません
  • ユーザーとプロファイルのデータの分離は非常にいいです
  • 失敗したログイン試行に関する非常に合理的なセキュリティモデル(ボットおよびDoS攻撃に対する優れた保護)

(マイナー)短所

  • 紛失したパスワードコードはDBでハッシュされません
  • (Googleが所有する)reCAPTCHAサービスに依存したくない人にとっては素晴らしいネイティブの(貧しい)CAPTCHAが含まれていますが、実際には十分に安全ではありません
  • 非常にまばらなオンラインドキュメント(コードはきちんとドキュメント化されていて直感的であるため、ここでは小さな問題です)

ここからタンク認証をダウンロード


元の回答:

私も自分で実装しました(現在、約80%が数週間の作業の後に行われています)。最初に他のすべてを試しました。 FreakAuth Light、DX Auth、Redux、SimpleLogin、SimpleLoginSecure、pc_user、Fresh Powered、その他いくつか。それらはどれも、IMOに匹敵するものではなく、基本的な機能が欠けていたり、本質的に安全ではなかったり、私の好みには肥大化しすぎていたりしませんでした。

実際、私はCodeIgniterのすべての認証ライブラリを詳細にテストしました(新年の直後)。 FWIW、私はあなたとそれを共有します:

DX認証

長所

  • 非常に充実した機能
  • フットプリントは中程度(25個以上のファイル)ですが、かなりスリムに感じることができます
  • 優れたドキュメント。ただし、一部は英語が少し壊れています
  • 言語ファイルのサポート
  • サポートされているreCAPTCHA
  • CIの検証システムへのフック
  • アクティベーションメール
  • 非アクティブ化されたアカウントの自動有効期限
  • 塩についてgrc.comを提案します(PRNGにとって悪くない)
  • 保存された「理由」文字列の禁止
  • シンプルで効果的なエラー処理

短所

  • ユーザーは、失効したパスワードのみを「リセット」できます(再アクティブ化時に新しいパスワードを選択させるのではなく)
  • 自作の擬似イベントモデル-善意だが、マークを逃す
  • ユーザーテーブルの2つのパスワードフィールド、スタイルが悪い
  • 2つの個別のユーザーテーブルを使用します(「temp」ユーザー用に1つ-曖昧で冗長)
  • 安全でない可能性のあるmd5ハッシュを使用
  • ログイン試行の失敗は、ユーザー名ではなくIPによってのみ保存されます-安全ではありません!
  • データベースでハッシュされない自動ログインキー-パスワードをクリアテキストで保存するのと同じくらい安全です!
  • ロールシステムは完全な混乱です:ハードコードされたロール名を持つis_admin関数、is_roleは完全な混乱、check_uri_permissionsは混乱です、パーミッションテーブル全体は悪い考えです(URIはページを保護せずに変更およびレンダリングできます;パーミッションは常に正確に保存されるべきです敏感なロジックがあります)。合意を壊すもの!
  • ネイティブ(貧しい)CAPTCHAを含む
  • reCAPTCHA関数インターフェイスが乱雑です

FreakAuth Light

長所

  • 非常に充実した機能
  • ほとんどが非常によく文書化されたコード
  • ユーザーとプロファイルのデータの分離はいい感じです
  • CIの検証システムへのフック
  • アクティベーションメール
  • 言語ファイルのサポート
  • 積極的に開発

短所

  • 少し肥大化した(50以上のファイル)
  • それでもなお、自動Cookieログインはありません(!)
  • ユーザー名とメールの両方でのログインはサポートしていません
  • UTF-8文字に問題があるようです
  • 多くの自動読み込みが必要です(パフォーマンスの低下)
  • ひどくマイクロ管理された構成ファイル
  • ひどいビューとコントローラーの分離。ビュー内の多くのプログラムロジックと、コントローラーにハードコードされた出力。合意を壊すもの!
  • 含まれるビューの貧弱なHTMLコード
  • 標準以下のCAPTCHAを含む
  • 至る所でコメントされたデバッグエコー
  • 特定のフォルダー構造を強制します
  • 特定のAjaxライブラリを強制します(切り替えることができますが、そもそもあるべきではありません)
  • ログイン試行の上限はありません-非常に危険です!合意を壊すもの!
  • フォーム検証のハイジャック
  • 安全でない可能性のあるmd5ハッシュを使用

pc_user

長所

  • その小さなフットプリントのための優れた機能セット
  • 軽量、膨張なし(3ファイル)
  • エレガントな自動Cookieログイン
  • オプションのテスト実装が付属(Nice touch)

短所

  • 古いCIデータベース構文を使用します(安全性が低い)
  • CIの検証システムにフックしません
  • ちょっと直感的でないステータス(ロール)システム(逆さまのインデックス-非実用的)
  • 安全ではない可能性のあるsha1ハッシュを使用する

フレッシュパワード

長所

  • 小さいフットプリント(6ファイル)

短所

  • 多くの重要な機能が欠けています。合意を壊すもの!
  • すべてがハードコーディングされています。合意を壊すもの!

Redux /イオン認証

CodeIgniter wiki によると、Reduxは廃止されましたが、Ion Authフォークは強力になっています: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Authは機能が充実したライブラリであり、過度に重いものや高度なものではありません。ほとんどの場合、その機能セットはプロジェクトの要件を満たします。

長所

  • CodeIgniterとの統合が簡単で軽量
  • ライブラリから直接メールを送信することをサポート
  • オンラインで十分に文書化されており、優れたアクティブな開発者/ユーザーコミュニティ
  • プロジェクトへの実装が簡単

短所

  • 他のいくつかよりも複雑なDBスキーマ
  • 一部の領域でドキュメントに詳細が欠けている

SimpleLoginSecure

長所

  • 小さなフットプリント(4ファイル)
  • 最小限の、絶対に肥大化しない
  • ハッシュにphpassを使用(優秀)

短所

  • ログイン、ログアウト、作成、削除のみ
  • 多くの重要な機能が欠けています。合意を壊すもの!
  • ライブラリよりも出発点の多く

誤解しないでください:上記のライブラリを軽視するつもりはありません。私は、彼らの開発者が成し遂げたことと、彼らがそれぞれどのくらい進んだかについて非常に感銘を受けました。私が言っているのは、時々これらのプロジェクトで、焦点が本質的な「必要なもの」(ハードなセキュリティ慣行など)からより柔らかい「必要なもの」に移り、それが私が是正したいことです。

したがって:基本に戻ります。

CodeIgniterの認証完了right

ここに、認証ライブラリの機能の最小要件リストを示します。また、たまたま自分のライブラリの機能リストのサブセットです;)

  1. オプションのテスト実装による小さなフットプリント
  2. 完全なドキュメント
  3. オートロードは不要です。パフォーマンスのためのライブラリのジャストインタイムロード
  4. 言語ファイルのサポート。ハードコードされた文字列はありません
  5. reCAPTCHAはサポートされていますが、オプションです
  6. 推奨されるTRUEランダムソルト生成(random.orgまたはrandom.irb.hrなどを使用)
  7. サードパーティのログインをサポートするオプションのアドオン(OpenID、Facebook Connect、Googleアカウントなど)
  8. ユーザー名またはメールを使用してログインする
  9. ユーザーデータとプロファイルデータの分離
  10. アクティベーションおよび紛失したパスワードの電子メール
  11. 自動Cookieログイン機能
  12. ハッシュ用の構成可能なphpass(もちろん適切にソルトされています!)
  13. パスワードのハッシュ
  14. 自動ログインコードのハッシュ
  15. 紛失したパスワードコードのハッシュ
  16. CIの検証システムへのフック
  17. セキュリティの質問はありません!
  18. オプションのクライアント側(Javascript)バリデーターを使用したサーバー側の強力なパスワードポリシーの適用
  19. 辞書攻撃とDoS攻撃の両方に対してBEST PRACTICES対策でログイン試行の最大失敗回数を強制しました!
  20. 準備された(バインドされた)ステートメントを介して行われるすべてのデータベースアクセス!

注:これらの最後のいくつかのポイントは、notWebアプリケーションに必要のない超高セキュリティオーバーキルです。 認証ライブラリがこれらのセキュリティ標準を100%満たしていない場合は、使用しないでください!

ソフトウェアから除外した無責任なコーダーの最近の注目すべき例:#17は、サラペイリンのAOLメールが大統領選挙中にハッキングされた方法です。ブリトニー・スピアーズ、バラク・オバマ、フォックス・ニュースなどのTwitterアカウントがハッキングされたとき、最近#18と#19の厄介な組み合わせが犯人でした。 #20だけで、中国のハッカーが2008年に1つの自動化されたハックで70.000を超える韓国のWebサイトから900万の個人情報を盗んだ方法です。

これらの攻撃は脳手術ではありません。後部ドアを大きく開いたままにしておくと、前面をボルトで固定することによって誤った安心感に惑わされるべきではありません。さらに、コーディングを真剣に考えてCodeIgniterのようなベストプラクティスフレームワークを選択する場合は、少なくとも最大限のbasicセキュリティ対策を正しく実行するようにしてください。


<暴言>

基本的には次のとおりです:I do n't careauthライブラリが多くの機能、高度なロール管理、PHP4互換性、きれいなCAPTCHAフォント、国別テーブル、完全な管理を提供する場合パネル、ベル、ホイッスル-ベストプラクティスに従わないことにより、ライブラリが実際に私のサイトを安全でないにする場合これはauthenticationパッケージです。正しいことを1つ行う必要があります。認証です。それができない場合that、実際には害よりも害が大きくなります。

</ rant>

/ Jens Roland

464
Jens Roland

Jens Rolandによる「包括的なリスト」にはユーザーロールは含まれていません。さまざまなユーザロール(admin/userまたはadmin/editor/userなど)を割り当てることに興味があるなら、これらのライブラリはそれを可能にします:

  • Ion_Auth(Reduxの書き換え)
  • リダックス
  • バックエンドプロ

Tank_Auth(Jensのリストの上の#1)にはユーザロールがありません。それが認証の一部ではないことに気づきましたが、

  • 認証とロール管理はどちらもページロード時に処理されます。
  • どちらもセキュリティが関係します
  • 同じテーブル/モデルを両方に使用できます。
  • 両方ともコントローラのコンストラクタにロードするように設定することができます(あるいは自動ロードすることもできます)

あなたがそれを必要とするなら、両方を処理するために1つのライブラリを持つことは多くの意味をなします。このため、Tank_AuthからIon_Authに切り替えます。

56
Burton Kent

Ion_auth!非常に有望で、設置面積が小さいようです。好き..

http://github.com/benedmunds/CodeIgniter-Ion-Auth

35
Marko

私はRedux Authの開発者であり、あなたが言及した問題のいくつかはバージョン2ベータで修正されました。サンプルアプリケーションを使って、これを公式Webサイトからダウンロードすることもできます。

  • オートロードが必要(パフォーマンスを妨げる)
  • 「セキュリティ上の質問」という本質的に安全でない概念を使用します。合意を壊すもの!

セキュリティに関する質問は現在使用されておらず、より単純な忘れられたパスワードシステムが導入されています。

  • 戻り値の型は、true、false、エラー、および成功コードのごまかしです。

これはバージョン2で修正され、ブール値を返します。私はあなたと同じくらいロッジを嫌っていました。

  • CIの検証システムにフックしません

サンプルアプリケーションはCIの検証システムを使用します。

  • ユーザーが「パスワードを失った」コードを再送信することを許可しない

進行中の作業

私はまた電子メールビューのようないくつかの他の機能を実装しました、これはあなたの電子メールでCodeIgniterヘルパーを使うことができるという選択をあなたに与えます。

それはまだ進行中の作業ですので、それ以上の提案がある場合はそれらを近づけてください。

-ポップコーン

Ps:Reduxを推薦してくれてありがとう。

29
Mathew

私はFlexi Auth( http://haseydesign.com/flexi-auth/ )に出会いました。それは非常に有望に見えます、そして私はそれを使い始めました。それは素晴らしい機能を持っています。 CIと完全に統合されており、2つの異なるライブラリファイルが付属しています。1つはすべての機能を非常に重くロードし、もう1つは検証のみを含むものです。

最良の方法の1つは、新しく登録されたメンバーが、自分の電子メールからリンクをクリックしてアクティブ化するまで、サイト上で一定期間一時アクセスを取得することです。

13
Suthan Bala

たぶんあなたは Redux あなたのニーズに合っていると思うでしょう。それはやり過ぎではなく、私たちのほとんどが必要とする裸の機能だけでいっぱいになります。開発者と貢献者は、提供されたコードについて非常に厳格でした。

これが 公式ページ です

12

Ion_Authは主にユーザーロールとドキュメントの2つの理由でtank_authを上回ります。これら2つはtank_authにはありません。

7
nedu

私は DX Auth のカスタマイズされたバージョンを使います。使い方が簡単で、変更が非常に簡単で、Code Igniterと非常によく似た ユーザーガイド(優れた例を含む) を持っています。

5
Jelani Harris

BackendPro もご覧ください。

究極的には、おそらくあなたは何か特別なものを書くことになるでしょうが、DX Auth、Freak Auth、BackendProなどからの概念を借用することに問題はありません。

パッケージ化されたアプリケーションに関する私の経験は、特定の構造に固有のものであり、ハックを必要とせずにそれらを自分のアプリケーションに統合するのに問題がありました。

私のCIコードではSmartyとADOdbも使用しています。そのため、最終的にコードに大きな変更を加えることになります。

3
Adam

私はIon_Authを試してみて、それに感謝、ところで...

SimpleLoginSecure認証を単純かつ安全にします。

2
Fabiano Shark

Tank Authは良さそうに見えますが、ドキュメントはインストール方法の1ページの説明に加えて、それぞれのPHPファイルの簡単な説明です。少なくとも、それが私がたくさんのGooglingの後に見つけたすべてです。 Tank Authがよく文書化されていると人々が言っ​​たときに上で意味しているのは、そのコードがよくコメントされているということでしょう。それは良いことですが、ドキュメンテーションとは異なります。 Tank Authの機能を既存のコードと統合する方法についての文書があれば便利でした。

2
user1284303