8

PHP でシンプルなシングル ユーザー ログイン「ライブラリ」を構築したいのですが、次のジレンマに直面しています: データベースを使用していない場合、ユーザー名とパスワードをどのように保存すればよいですか?

単純なプレーン テキスト ファイルは簡単に読み取れる可能性があり、パスワードは簡単に解読される可能性があるため、これはオプションではありません。

だけでphpファイルを作成すると

<?php
    $Username= "username";
    $Password= "password";
?>

誰もそれを読むことができないはずなので、必要な場所にこのファイルを含めるだけで済みますが、これを行うためのより良い方法を見つけることができないかどうかはわかりません!

では、この問題に対する最善の解決策は何だと思いますか (そしてその理由は?)

ありがとう

4

9 に答える 9

3

プレーン テキスト ファイルオプションであり、ここでは最も簡単なソリューションです。パスワードを単純にハッシュします ( saltを使用)。確実に復号化できるわけではありません。

これには、PHPmd5またはsha1ハッシュ関数を使用できます。

于 2010-05-06T17:29:06.110 に答える
3

ファイルに保存して SHA1/SHA2 ハッシュを使用すると、復号化できなくなります。

user:<sha1hash>
user:<sha1hash>
...
于 2010-05-06T17:28:34.207 に答える
2

複数のアカウントが必要な場合は、PHP ソース ファイルを使用するよりもプレーン テキスト ファイルの方が簡単です。でも、ブラウザからファイルをリクエストする人が心配だと思いますか?

Web ホストに、実際の Web コンテンツがある場所の親ディレクトリなど、公開されていないディレクトリがあるかどうかを確認します。通常、PHP はそこで読み書きできますが、Web 経由でアクセスすることはできません。

アクセスできるディレクトリがない場合は、ファイルのアクセス許可や.htaccess ファイル(Apache) が役立つ場合があります。

単純なパスワードを保存するのではなく、 crypt関数を使用してパスワード (ハッシュ) を保存することをお勧めします。これは、それらを保存する場所とは別の問題です:)

于 2010-05-06T17:33:19.507 に答える
1

ユーザーが 1 人しかいない場合、ユーザー名を持つ目的は何ですか?

.htaccess を使用してアクセス許可を管理することもできます...

于 2010-05-06T17:35:12.910 に答える
1
  • ハッシュまたは暗号化関数を含むプレーン テキスト ファイルを使用できます。信頼性は高いですが、多くのユーザーがいる場合は柔軟ではありません。

  • データベースであるがサーバーではなく、単純なファイルに格納されているSQLiteを使用することもできます。SQL サーバーをインストールできないが、多くのユーザーを保存して柔軟性を高めたい場合、これは良い妥協案です。

  • 何をしたいかによっては、.htaccessが適切な解決策になる可能性があります。すでに安全ですが、プレーン テキスト ソリューションとして柔軟性に依存していません。しかし、ほとんどすべての Apache 構成に組み込まれています。

于 2010-05-06T17:32:33.850 に答える
1

(これは、もくちゃんへの返信として、Daniel DiPaolo へのコメントとして始まりました。)

パスワードを (場所に関係なく) 保存する場合は、次のスキームを使用します。

$hashedPassword = $salt . ハッシュ ( $salt . $password);

ハッシュされたパスワードの保存場所は安全でなければなりません。適切な権限が設定されたデータベースまたはファイル内にある必要があります。

ファイルの場合、パスワードシークレットを持つユーザーbobの「レコード」は次のようになります (BCrypt Hash を使用):

bob:$2a$05$tlk4M8WSpVkO7ER6QGxcwuY91MrBCQn.TCDZ5eOM1iz2sCChtR62K

パスワードを「解読」する方法はありません。これがハッシュ アルゴリズムを使用するポイントです。元に戻すことはできません。

あなたは次のように述べています:

md5 と sha1 を解読しようとするツールがいくつかあり、少なくともいくつかのケースでは機能しているようです

ハッシュ アルゴリズムは元に戻せないため、これは不可能です。(「復号化」オプションはありません)

私の推測では、事前に計算されたテーブルからハッシュを検索し、パスワードである可能性が高い有効な入力文字列を返したツールについて言及していると思われます。
これらのテーブルは、レインボー テーブルと呼ばれます。A)ランダムなソルトを使用し、B) 強力なハッシュ アルゴリズム (BCrypt ハッシュまたは SHA2 ファミリ ハッシュなど)を使用することで、それらを打ち負かすことができます。

不適切なハッシュ アルゴリズムについて: MD5 と SHA1 は暗号的に壊れていると見なされます。言い換えれば、それらをもう使用するべきではありません。

これに関する議論については、https ://stackoverflow.com/questions/2768248/is-md5-really-that-bad を参照してください。

于 2010-05-06T18:42:11.643 に答える
0

パスワードを暗号化できると言っているすべての人と同じです。

また、ファイルをドキュメントツリーに入れないでください。ファイルを別の場所に置きます。PHPプログラムは、「..」となる絶対パスまたは相対パスを指定することで、それを読み取ることができるはずです。ただし、階層を上に移動してからファイルの場所に到達するための多くのレベルがあります。(Javaアプリには、この種のものを格納するのに便利なWEB-INFディレクトリがあります。PHPにはそのようなものはないと思います。PHPを実行してからしばらく経ちますが、できます。常にファイルをアプリケーションのディレクトリ階層の完全に外側に置くだけです。)

于 2010-05-06T19:43:51.943 に答える
0

最善の方法は

$password_hash = hash("sha256", "iamawesome"); // 4aa4029d0d0265c566c934de4f5e0a36496c59c54b6df8a72d9c52bdf0c1a0e8

$user_entered = hash("sha256", $_POST['password']); return ($user_entered == $password_from_db);

ハシンはあなたのパスワードを保護します..

詳細な記事: http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way

于 2012-10-19T05:48:53.737 に答える
0

車輪を再発明しないでください。これを使用してくださいhttp://pear.php.net/manual/en/package.fileformats.file-passwd.file-passwd-unix.php

于 2010-05-06T20:45:39.617 に答える