1

ログインプロセスを保護するためのトレーニングを行っています。

sign_up.phpでsha256を使用しました:

$username= check_input($_POST['username']);
$password= check_input($_POST['password']);
//the password is encrypted in sha256
$secure_sign_up_password = hash('sha256', $password);

そしてもちろん、SQLデータベースのusersテーブルで、次のように読むことができます。

  • 「login」列に実際に入力されたログインの例:誰かが「michael」と入力した場合、SQLデータベースに「Michael」が表示されます

  • 「password」列に実際に入力されたログイン例:誰かが「fruit」と入力した場合、SQLデータベースに「e8bfab56c53980cd014206c8da2f8c9b9708eaacc61」のようなハッシュ値が表示されます。

私の質問は単純ですが、少しナイーブかもしれません(私は初心者です):データベースのどこかで実際のパスワードを読み取ることができ、ハッシュはパスワードが傍受されて読み取られるのを防ぐためだけに行われたと思いました送信されていました。私は決して知りません、誰かが彼に彼の本当のパスワードを送るように私に頼むかもしれません。しかし、私が見ることができるのは、パスワード列の「ハッシュされた」ものだけです。

  • こんな風に作られていますか?
  • 実際のパスワードも視覚化することは可能ですか?
4

4 に答える 4

4

これらのパスワードを「デコード」できるとしたら、それは非常に安全なシステムではありません。誰かがあなたのデータベースにアクセスできるようになると、彼らは知らないうちにすべてのパスワードにアクセスできるようになります...

サイトのパスワードを忘れたことがあれば(そして私たち全員が持っています-それを否定しないでください!)、彼らは通常*あなたに思い出させるためにあなたにパスワード(プレーンテキストで)を単に送るのではないことを思い出してください電子メール-彼らはあなたにそれをリセットする機会を与えるでしょう。このようにして(通常はあなたの電子メール/電話番号で確認します)、彼らはあなたが実際にアカウントを開設した人であることを知るでしょう。

*パスワードがプレーンテキストで送信された場合、それはおそらく、そのように、または他の簡単に復号化できる形式でパスワードを保存していることを意味します。このサイトは、彼らが考えているほど安全ではない可能性が高いです...


ユーザーアカウントにアクセスできるようにするための「バックドア」を残しておくことに興味がある場合は、管理者アカウント内から特別なログインフォームを作成して、エンコードされたパスワードを使用できるようにすることをお勧めします。これは、を省略して、すでにエンコードされている(データベースから抽出した)ものをhash('sha256', $password)渡すだけであることを意味します。$passwordこれは少しハッキーです。すでに管理者アカウントを持っている場合は、すでにすべてのユーザーが強力であるため、別のユーザーとしてログインできることはあまり役に立ちません。

于 2012-07-16T20:39:35.903 に答える
3

これは仕様によるものです。 私を除いて、誰も私のパスワードが何であるかを知る必要はありません。(ここに派手なタイトルを挿入)としてのあなたでさえ、私のパスワードを知らないはずです。私がそれを忘れた場合、それは私の問題ですが、あなたのサイトは私にそれをリセットする方法を提供するはずです。その後、リセットすると、サイトにもう一度ハッシュが保存されます。プレーンテキストのパスワードはどこにも保存しないでください。

于 2012-07-16T20:38:28.883 に答える
2
  1. データベースでパスワードをオープン形式で保持することは決してありません。誰かがシステムでエクスプロイトを見つけた場合、彼は任意のSQLクエリを実行し、ユーザーのパスワードを取得することができます。また、ハッカーはユーザー名とパスワードを知っているため、ユーザーとしてシステムにログインできます。
  2. ユーザーがパスワードを復元したい場合は、パスワードを再生成する機能を作成します。パスワードをプレーンテキストで保存しないでください。
  3. SHA256はハッシュ関数です。数学的には、データは1つの方法でのみ「ハッシュ」できることを意味します。つまり、ハッシュからデータを復元することはできません。このhttp://en.wikipedia.org/wiki/Hash_functionはハッシュ関数について、これはhttp://en.wikipedia.org/wiki/Sha256 sha256について読むことができます。結果:誰かがデータベースをクラックしてユーザー名とパスワードを取得した場合、彼はシステムにログインできません。ハッカーはハッシュデータしか持っておらず、ログイン用のパスワードを正確に取得できないためです。
  4. 前に述べたように、ハッシュ関数は1つの方法でのみデータを「ハッシュ」することができます。しかし、一部のハッカーは、いくつかの事前定義されたアルゴリズムのために非常に大きなデータを大量に構築します。つまり、彼らはパスワードのハッシュテーブルを作成します。このようなハッシュテーブルは次のようになります。
    パスワードハッシュ
    ------------------
    some_hash1
    b some_hash2
    ......。
    qwerty some_hash3
    some_data some_hash3-はい、データは衝突する可能性があります。ハッシュ関数についてはwikiを参照してください

そして、ハッカーがあなたのデータベースをハッキングしてそのようなテーブルを持っている場合、彼はパスワードを復元することができます。たとえば、ハッカーは管理者ユーザーハッシュ「some_hash3」を取得し、ハッシュテーブルでそのようなハッシュを検索し、ハッシュ「some_hash3」のパスワードが「qwerty」と「some_data」であることを確認すると、ハッカーはそのようなパスワードでログインしようとします。結果:塩を使用します。今日のハッカーは、6つのシンボルのパスワード用のそのようなテーブルを持っています。しかし、非常に単純な手法でそれらを「吸い込む」ことができます。データベースにパスワードを保存するときは、パスワードに値(ソルト)を追加して、そのような値のハッシュから取得します。

// somewhere in code, where creating/updating users password

$password = hash('sha256', $salt.$password);

パスワードを確認するときは、同じロジックを使用します

ありがとう

于 2012-07-16T21:02:19.707 に答える
0

sha256ハッシュと他のハッシュは一方向です。http://en.wikipedia.org/wiki/Cryptographic_hash_functionを参照してください。データベースのパスワードフィールドに書き込んだ内容を復号化できるようにする場合は、別の方法を使用することをお勧めします。

ハッシュを作成する代わりに、ユーザーと共有しないキーで暗号化することができます。http://www.php.net/manual/en/book.mcrypt.phpを見てください。ただし、キーは対称暗号化であるため、コードの一部になります。

本当に安全にするには、実際のP​​KI暗号化を試してください(公開鍵で暗号化し、秘密鍵で復号化します)。php.net/manual/en/function.gnupg-encrypt.phpまたはphp.net/manual/en/book.openssl.phpを見てください。

しかし、ここで他の人が言っているように、そのようなことは合理的に行われていません;)

于 2012-07-16T22:40:45.587 に答える