3

CodeIgniter 用のカスタム認証システムを構築しました (さまざまなサードパーティ ライブラリが利用可能であることは知っていますが、これは自分の利益のためです)。

私は (データベースを介して) CI セッションを使用し、おそらく無意味な難読化のために Cookie 値を暗号化します。ログインは SSL 経由で行われます (Cookie は安全性のみを目的として変更されます)。また、phpass を使用して、ストレージ用のパスワードをハッシュしますが、ここではあまり関係ありません。この部分のどこかに弱いリンクがあるかもしれませんが、私の主な懸念は、ページ間のチェックが基本的if is_logged_in = trueに、セッション内のユーザー名とともに型アプローチで構成されていることです。少し「簡単」すぎるように見えるので、これは少し心配です。このアプローチは非常に脆弱ですか?たとえば、ユーザーエージェントなどのページごとのハッシュを計算し、それらが一致することを確認する必要がありますか?

どんなポインタでも大歓迎です。私が言ったように、私は既存の解決策を認識していますが、ここでいくつかの学習を学ぼうとしています:)

4

3 に答える 3

3

あなたが言及したすべてが良いです。しかし、私はphpassに慣れていません。パスワードをハッシュするときは、ソルトを使用していることを確認してください。

if_logged_in = trueセッション データはサーバー側に保存されるため、チェックで十分です。ユーザー エージェントなどをチェックする理由は、ある人が別の人のセッション ID を取得するセッション ハイジャックから保護するためです。

于 2010-12-14T19:49:04.117 に答える
2

PS: 私はセキュリティの専門家ではないので、セキュリティの専門家によって検査されたシステムを使用することを好みます: openid、facebook connect、twitter(oauth)、google signin など

しかし、ここに私のチェックリストがあります(私は考えることができます):

  • SSL を使用して、ネットワーク経由で送信されたパスワードを誰も読み取れないようにします。
  • すべての入力 ($_POST、$_GET、$_SERVER など) をサニタイズする必要があります。がローカル変数でない場合は注意が必要です。したがって、たとえば、$_SESSION['is_logged_in']このフィルターを使用してサニタイズする必要があります => $var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); AGAINサーバーからのすべての入力に対して、安全ではないため、サニタイズを行う必要があります。最善の方法は、ブラックリストの代わりにホワイトリストを使用することです。何かを逃す可能性があるからです。
  • PDOを使用して、SQL インジェクションのリスクを最小限に抑えます。
  • パスワードを平文でデータベースに保存するのではなく、ハッシュ化してください。それでも危険なビジネスだと思います。最近、gawker/lifehacker が侵害されているためです (どうしてそうなったのか不思議に思っていますか?)。owaspも推奨しているので、あなたのphpassはかなりしっかりしていると思います。
  • XSS 攻撃に注意してください。入力をサニタイズしているため、すでに完了しています
  • CSRF対策を行ってください。たとえば、ユーザーがログインしているときに電子メールアドレスを変更できる場合、これは非常に危険です。次のステップは、パスワードをリセットするために電子メールを送信することであり、システムが危険にさらされます.
于 2010-12-14T23:01:20.227 に答える
0

私はphpassに精通していませんが、MD5を使用しているかどうかを確認してください。使用している場合は十分ではありません。bycrypt http://www.memonic.com/user/pneff/id/1qHCTを使用

于 2011-07-05T16:21:50.583 に答える