CodeIgniterの認証ライブラリをどのように選択すればよいですか?[閉まっている]


398

私はそこにある参照数が。どれが維持され、使いやすいですか?彼らの長所と短所は何ですか?


8
それでも興味がある場合は、Tank Authをご覧ください。確認した後、以下の投稿を更新しました。すばらしいです。
Jens Roland、

7
更新していただきありがとうございます!これは、今後、この質問の訪問者にとって貴重な情報となるので、受け入れられる回答を変更しました。
GavinR、2010

3
なぜ突然閉店したのですか?6つの主観的な質問のガイドラインに非常によく適合しているようです。
Brian Ortiz

3
再開に指名されました。私が持っていた質問(CIのどの認証システムに注目する価値があるか)に完全に答えました。
Cruachan、2012

3
@BrianOrtizとCruachanに同意する:なぜ閉じるのですか?良い質問と素晴らしい答え。
Peter K.

回答:


465

更新(2010年5月14日):

結局のところ、ロシアの開発者Ilya Konyukhovがこれを読んだ後、ガントレットを手に取り、以下の推奨事項と要件に従って、DX Authに基づいてCI用の新しい認証ライブラリを作成しました。

結果のTank Authは、OPの質問に対する答えのように見えます。ここから外に出て、Tank Authを、今日利用可能な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に欠けていたり、本質的に安全ではなかったり、私の好みでは肥大化していなかったり、IMOに達していませんでした。

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

DX Auth

長所

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

短所

  • ユーザーに失われたパスワードの「リセット」のみを許可する(再アクティベーション時に新しいパスワードを選択させるのではなく)
  • 自作の疑似イベントモデル-意図は正しいが、目標を達成できていない
  • ユーザーテーブルの2つのパスワードフィールド、不適切なスタイル
  • 2つの個別のユーザーテーブルを使用(1つは「temp」ユーザー用-あいまいで冗長)
  • 安全でない可能性のある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ログイン
  • オプションのテスト実装が付属しています(素敵なタッチ)

短所

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

フレッシュパワード

長所

  • 小さな設置面積(6ファイル)

短所

  • 重要な機能がたくさんありません。合意を壊すもの!
  • すべてがハードコーディングされています。合意を壊すもの!

Redux / Ion Auth

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

Ion Authは、過度に重くなったり、高度になったりすることのない、優れた機能を備えたライブラリです。ほとんどの場合、その機能セットはプロジェクトの要件を満たすだけではありません。

長所

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

短所

  • 他よりも複雑なDBスキーマ
  • ドキュメントの一部の領域に詳細がない

SimpleLoginSecure

長所

  • 小さなフットプリント(4ファイル)
  • ミニマル、膨らみなし
  • ハッシュにphpassを使用します(優れています)

短所

  • ログイン、ログアウト、作成、削除のみ
  • 重要な機能がたくさんありません。合意を壊すもの!
  • ライブラリよりも出発点の詳細

誤解しないでください。上記のライブラリを軽視するつもりはありません。私は彼らの開発者が何を達成したか、そしてそれぞれの開発者がどれだけ進んでいるかに非常に感銘を受けており、自分のコードを構築するためにそれらのコードの一部を再利用することはしません。私が言っていることは、これらのプロジェクトでは、重要な「必要なもの」(ハードセキュリティの実践など)から、やわらかな「必要なもの」に焦点が移り、それを改善したいと考えていることです。 。

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

正しく行われたCodeIgniterの認証

これは、認証ライブラリからの機能の最低限必要なリストです。それはたまたま私のライブラリの機能リストのサブセットです;)

  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攻撃の両方に対するベストプラクティスの対策を講じました
  20. すべてのデータベースアクセスは準備された(バインドされた)ステートメントを介して行われます!

注:これらの最後の数点は、Webアプリケーションに必要のない超高セキュリティの過剰ではありません。認証ライブラリがこれらのセキュリティ基準を100%満たしていない場合は、使用しないでください。

彼らをソフトウェアから除外した無責任なコーダーの最近の注目度の高い例:#17は、大統領キャンペーン中にサラペイリンのAOLメールがハッキングされた方法です。最近、18番と19番の厄介な組み合わせが犯人であり、ブリトニースピアーズ、バラックオバマ、フォックスニュースなどのTwitterアカウントがハッキングされました。そして、#20だけでも、中国のハッカーが2008年に1回の自動ハッキングで70.000以上の韓国のWebサイトから900万個の個人情報を盗むことができました。

これらの攻撃は脳の手術ではありません。バックドアを大きく開いたままにしておく場合は、フロントをボルトで固定することによって、誤った安心感に騙されないようにしてください。さらに、CodeIgniterのようなベストプラクティスフレームワークを選択するコーディングに真剣に取り組んでいる場合は、少なくとも最も基本的なセキュリティ対策を正しく実行する必要があります。


<暴言>

基本的には、次のとおりです。認証ライブラリが一連の機能、高度なロール管理、PHP4互換性、かなりのCAPTCHAフォント、国テーブル、完全な管理パネル、ベルとホイッスルを提供するかどうかは気にしません -ライブラリが実際に作成するかどうかベストプラクティスに従わないため、サイトの安全性低下します。これは認証パッケージです。認証という1つのことを正しく行う必要があります。それができない場合は実際には良いことよりも多くの害を及ぼしています。

</ rant>

/イェンス・ローランド


1
私は、それにはまだ厄介なアーキテクチャの問題に遭遇していますし、一緒に迅速な回避策をハッキングの間で選択しなければならなかった(それがうまく動作しますが、密結合に苦しむだろう)、または後ろに座ると、それを行う方法についてはハードだと思う。私は後者のオプションを選択しましたが、まだそれを解読していません:D
Jens Roland

2
イェンス、あなたの(優れた)投稿への応答として作成されたように見えるタンク認証を見たいと思うかもしれません:codeigniter.com/forums/viewthread/110993
Richard M

8
この投稿を更新して、Ion-Auth(dx-authから派生)と比較できますか?この時点では、ion-authはtank-authよりも最新でアクティブなようです。役に立つかもしれないいくつかの追加機能があるので、Tank-authと同じくらい良いかどうかをセキュリティの観点から知りたいです。
ビジェイ

1
これらのライブラリはすべてmysqlを使用します。ただし、私はnoSqlデータベースであるMongoDbを使用しています。MoongoDBで動作するライブラリはありますか?上記のライブラリの1つを変換してMySqlの代わりにMongoDBに挿入しようとしましたが、複雑になりすぎて、すでにこれを実行しているライブラリを知りたいと思っています
Ninja

2
@Lykos:確かに-ユーザーデータは、UserID、UserName、Email、PasswordHash、LastLoginTimeなどの認証固有のデータになります。プロファイルデータは別のDBテーブルに保存する必要があり、特定のアプリケーションによっては何でもかまいません。これには、誕生日、性別、出身地、評判スコアなどが含まれます。これにより、アプリケーション開発者は、認証システムが突然壊れることを心配する必要なく、好きな方法でProfileDataテーブルを変更できます。
Jens Roland

58

Jens Rolandによる「包括的なリスト」には、ユーザーの役割が含まれていないことに注意してください。異なるユーザーロール(admin / userやadmin / editor / userなど)を割り当てることに興味がある場合は、これらのライブラリで次のことができます。

  • Ion_Auth(Reduxの書き換え)
  • 戻ってきた
  • バックエンドプロ

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

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

必要に応じて、1つのライブラリで両方を処理できるようにするのは非常に理にかなっています。このため、Tank_AuthからIon_Authに切り替えています。


ああ、それを知っておくのは本当に良いことです。1つのライブラリにすべての側面を含めると、すべてがシンプルで機能的になります。そのためだけにIon_Authを調べる必要があります。バートンに感謝!
Edd Twilbeck、2010

4
もちろん、これは良い点であり、ロール管理(一般に承認)は多くのサイトの中心的な部分であり、認証システムと密接に関連しています。それでも、高度なビルトインロール管理を備えた脆弱な認証システムよりも、単純化された、または存在しないロール管理を備えた安全な認証システムをいつでも選択します。
Jens Roland

Ion_AuthはCI 2.1とDataMapper ORMでうまく機能します
user482594

37

Ion_auth!非常に有望で小さな設置面積に見えます!好き..

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


Ion Authは私にとってもうまく機能し、必要なものはすべて備えています(秘密の質問など)。
SolidSmile 2010年

1
Ion Authは、使用法、機能、軽量性の点で現在のリーダーのように見えます。
pbreitenbach、2010

5
私はTank AuthとIon Authの両方を試しましたが、Tank AuthコードはIon Authよりもはるかに簡潔で、理解しやすく、拡張も容易です。一方、Ion Authは「ロール」をサポートしています。
ジョナサン

30

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

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

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

  • 戻り値の型は、true、false、エラー、成功コードの寄せ集めです

これはバージョン2で修正され、ブール値を返します。私はあなたほどホッジポッドを嫌っていました。

  • CIの検証システムにフックしない

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

  • ユーザーが「失われたパスワード」コードを再送信することを許可しません

進行中の作業

メールビューなどの他の機能も実装しました。これにより、メールでCodeIgniterヘルパーを使用できるようになります。

それはまだ進行中の作業ですので、他に提案がある場合は是非ご利用ください。

-ポップコーン

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


1
やあ、マシュー-そして私の投稿に答えてくれてありがとう。ベータ版は非常に興味深いようです。きっとお気づきのように、Reduxはすでに私のまとめですべてを正しく処理することに最も近づいていたので、すぐに調査します。
Jens Roland、

CIフォーラムのスレッドとロードマップを一目見ただけです。見栄えが良い-「動的」塩に関しては、連結することをお勧めします(登録日)。(設定ファイルのハッシュキー)。(コードまたはパスワード)レインボーテーブルと盗まれたデータベースに対するブルートフォースを阻止するには
Jens Roland

また、認証のベストプラクティス(stackoverflow.com/questions/549/…)およびボットネットスロットリング(stackoverflow.com/questions/479233/…)について、いくつかの考えがあります。
イェンスローランド

14

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

最高の1つは、新しく登録されたメンバーが、メールからリンクをクリックしてアクティブ化するまで、サイト上で一定期間一時的にアクセスできることです。


このリンクをありがとう。また、Flexi Cart haseydesign.com/flexi-cartにも優れた機能があります。
Vir

13

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

これは、公式ページ


1
現在のバージョンはCode Igniterの最新バージョンをサポートしていますか?長い間アップデートがなかったようです。そうでなければ私はそれが好きです。
GavinR 2008

本番サイトで最新のCIバージョンのReduxを使用しています。CIと同様に非常に軽量で、非常にカスタマイズ可能です。
GloryFish 2009年

1
Reduxはより長く維持されます。この議論を参照してください。codeigniter.com/forums/viewthread/145342
Pixel開発者

Ion AuthはRedux Auth 2に基づいており、私が使用するものです。PyroCMSもそれを使用します。 github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi

8

Ion_Authは、主に2つの理由(ユーザーロールとドキュメント)のためにtank_authに勝っています。これら2つはtank_authにありません。



4

また、見てください BackendProを

最終的には、おそらくカスタムの何かを作成することになりますが、DX Auth、Freak Auth、BackendProなどから概念を借用することに問題はありません。

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

また、CIコードでSmartyとADOdbを使用しているので、常に大きなコードの変更を行うことになります。


3

Tank Authは良さそうですが、ドキュメントは、インストール方法の1ページの説明と、各PHPファイルの簡単な概要です。少なくとも、グーグルをたくさんやってみて、それだけが見つかりました。たぶん、Tank Authが十分に文書化されていると彼らが言ったとき、人々が上で意味することは、コードが十分にコメントされているということです。これは良いことですが、ドキュメントとは異なります。Tank Authの機能を既存のコードと統合する方法についてのドキュメントがあればよかったでしょう。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.