2

私は最近、MySQL を使用せずにセッションを使用してテストするために、ユーザー名とパスワードでログインする PHP ログイン スクリプトを作成しました。

このような配列にパスワードを保存しました

$filepassword[1] = "123"; // User Bob
$filepassword[2] = "321"; // User Tim

ユーザー名は、次のように配列に同じ方法で格納されます

$fileuser[1] = "Bob"; // Password 123
$fileuser[2] = "Tim"; // Password 321

Post を使用して入力されたパスワードを取得し、それを for ループに入れます。パスワードが配列内の 1 に等しい場合は、壊れて 1 を返し、数字がユーザー名と一致するかどうかを確認し、一致するかどうかを確認します。

しかし、パスワードまたはそれらのハッシュをphpファイルに保存する必要がありますか?

4

4 に答える 4

12

ユーザー名とパスワードの保存にphpファイルを使用するのはなぜですか? ユーザー名/パスワードの取得にデータベースを使用することは、かなり標準的です (そして最近では簡単です)。

そうは言っても、パスワードを平文でデータベースに保存したくはありません。

PHP 5.5 にはまったく新しいパスワード関数のセットが登場しています。これらの関数の上位互換性を可能にするライブラリを使用するのはどうでしょうか? Password_compat

ポイントは、ファイルをインクルードし、その機能を使用し、5.5 が出てきたら、インクルードを削除するだけで、コアの一部であるため、すべての機能が引き続き機能するということです。

使い方はとても簡単です:

  • を使用してパスワードをハッシュしますpassword_hash()
  • ユーザー名とハッシュをデータベースに保存する
  • ログイン時にpassword_verify()、$_POST で送信されたパスワードをデータベースのハッシュと照合するために使用します。

それでおしまい!シンプル、セキュア、前方互換性。フラット ファイル ストレージよりも強くお勧めします。


時間をかけて MySQL を学習する必要があります。ただし、具体的な実装ではなくインターフェースにコーディングして、必要なときにいつでもストレージのタイプを別のタイプに切り替えることは素晴らしいことです。

そうは言っても、パスワードとユーザー名をハッシュし、必要に応じてそれらをファイルに書き込みます。少なくとも、平文ではなくハッシュ化されます。上記の機能は引き続きご利用いただけます。

serialize()配列をファイルに書き込んで、unserialize()それを元に戻すこともできます。しかし、時間を割いて MySQL の基礎を学ぶことを強くお勧めします。すぐに習得できます。

于 2013-05-29T09:49:03.817 に答える
2

はい、いいえ。

PHP はサーバー側の言語であるため、クライアントを介して誰もパスワードを見ることはできません。

ただし 1: ハッカーがサーバーにアクセスした場合、パスワードは保存されず、侵害されません。2: エラーが発生し、php ファイルが php ではなくテキストとして表示されるため、サーバーは PHP をテキストとして出力し、再び侵害されます。

したがって、ある意味では、安全のために少なくともそれらをハッシュすることを強くお勧めします.

次に、それをphpファイルに保存する問題です。いくつかの問題があります。1: 使い方は簡単ではありません。データベースを使用すると、適切な検索などを行うことができます。記憶の無駄

于 2013-05-29T09:48:44.567 に答える
0

少数のパスワードの場合、それらをファイルに保存することは完全に実行可能です。適切な配列形式を選択する必要があります。あなたの形式は...最適ではありません。また、言われているように、パスワードを平文で保存しないでください。

passwords.php

<?php

return array(
    'Bob' => '$2y$10$lwnevwevweuvuev...',  // hash of Bob's password
    ...
);

login.php

<?php

// include https://github.com/ircmaxell/password_compat functions
require_once 'lib/password.php';

$passwords = require 'passwords.php';

if (isset($_POST['username'], $_POST['password'])) {
    if (!isset($passwords[$_POST['username']])) {
        die('Invalid username');
    }
    if (!password_verify($_POST['password'], $passwords[$_POST['username']])) {
        die('Invalid password');
    }
    echo 'Hi there!';
}

堅牢なアルゴリズムを使用して適切にハッシュ化されたパスワードを保存する限り、それらをファイルに保存することは、データベースを使用することよりも安全ではありません. その PHP ファイルの内容を誤って明らかにしないように、十分に注意する必要があります。var_debug($passwords)Web サーバーの配置や設定が間違っていると、パスワード ハッシュが公開される可能性があります。この場合、それらはまだハッシュされていますが、秘密にしておく方がよいでしょう。https://github.com/ircmaxell/password_compatのようなハッシュには、実績のあるユーザー フレンドリーなライブラリを使用してください。

于 2013-05-29T10:00:59.637 に答える