ユーザー名とパスワードがこの形式で保存されているusers.txtファイルがあります(教育的な理由から、.txtファイルでなければなりません)。
username1:password1
username2:password2ユーザー名とパスワードが.txtファイルから正しいかどうかを確認する
パスワードはmd5で暗号化されています。また、ユーザー名とパスワードを入力するログインページもあります。私の質問は、ユーザー名とパスワードが正しいかどうかを確認する方法です。
ユーザー名とパスワードがこの形式で保存されているusers.txtファイルがあります(教育的な理由から、.txtファイルでなければなりません)。
username1:password1
username2:password2ユーザー名とパスワードが.txtファイルから正しいかどうかを確認する
パスワードはmd5で暗号化されています。また、ユーザー名とパスワードを入力するログインページもあります。私の質問は、ユーザー名とパスワードが正しいかどうかを確認する方法です。
:あなたのファイルには、各行のユーザーとパスワードで、ライン毎にreadedされます。このコードで
<?php
$user_input = $_POST['user'];
$password_input = md5($_POST['pass']);
$file = fopen('users.txt', 'r');
while(!feof($file)){
$line = fgets($file);
list($user, $password) = explode(':', $line);
if(trim($user) == $user_input && trim($password) == $password_input){
echo 'Logged in';
break;
}
}
fclose($file);
は、このコードによって得られる:list($user, $password) = explode(':', $line);
し、コードがいるかどうかをチェックしますそれらはユーザーの入力と同じです。ユーザーとパスワードが正しい場合は、Logged in message
となり、ファイルは閉じられます。
ユーザー名とパスワードが正しい場合は完全に動作しますが、ユーザー名またはパスワードが正しくない場合はエラーが発生します。ユーザー名またはパスワードが間違っているというメッセージを表示するにはどうすればよいですか? – bux
@bux * "ユーザー名やパスワードが間違っているというメッセージを表示するにはどうすればいいですか?" 'if/else' –
@buxユーザ名が一意であると仮定すると、while中にififにelseif条件を追加することができます:' elseif(trim($ user)== $ user_input){ echo 'ユーザ名/パスワードが正しくありません'; 休憩。 } ' – aperpen
パスワードは、セキュリティのために不可逆的な方法で保存する必要があります。パスワードを保存する必要がある場合、パスワードは非可逆関数でエンコードされて保存されます。パスワードが検証される必要があるとき、それは非可逆関数で再び符号化され、その結果は記憶されたバージョンと比較される。
PHPでは簡単ですが、パスワードを保存するときはpassword_hash
、パスワードを確認するときはpassword_verify
を使用するだけです。これは非常に安全な方法です。あなたはこのような何か行うことができます
あなたはこれを自分で解決しようとしましたか? –
ハッシュ関数を使用するだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。代わりに、約100msの持続時間の間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存してください。 'PBKDF2'、' Rfc2898DeriveBytes'、 'password_hash'、' Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph
MD5は暗号化されていません。弱い暗号化ハッシュです。暗号化ハッシュは一方向性関数であり、操作を逆にすることはできません。暗号化は可逆的な機能であり、暗号化と復号化に必要な鍵を持っています。 – zaph