0

うまくいけば、これは簡単です。「root」パスワードを提供できる場合、ユーザーに管理権限を付与しようとしています。この新しく入力したパスワードを root パスワードと比較する方法はありますか? これは私のコードがこれまでにどのように見えるかです:

<form action='index.php?login=yes' method=POST>
Password: <input type=password name='pwd'><br />
<input type=submit value='Login' />
</form> 

<?php

    $pass=$_POST['pwd'];
    $login=$_GET['Login'];

    if($login=='yes') {

        $con=mysql_connect('localhost','root','');
        mysql_select_db('Login');

        $get=mysql_query("SELECT count(id) FROM Login WHERE pwd = '$pass'");
        $result=mysql_result($get, 0);

        mysql_close($con);

        if($result!=1)
            echo"Login Failure!";
        else {
            echo"Login Success";
        };  
    };
?>
</p>

PHP は私が慣れ親しんでいるものとは大きく異なるため、優しくしてください (私は Java の方が好きです)。ありがとう!

4

1 に答える 1

2

ソルトを使用してパスワードをハッシュすることを検討する必要があります。md5() アルゴリズムは安全な環境にはあまりお勧めできませんが、少なくとも作業が難しくなります。

パスワードをデータベースに保存するときは、次のようにする必要があります

$salt = 'dhg1d9h12h1029he01h2e1'; // ここにランダムで長いものを入れます
$hashedpassword = md5($salt.md5($password, true)); // または、ここで好きな他の組み合わせ

次に、次のように $hashedpassword をデータベースに保存できます。

mysql_query(sprintf("UPDATE Login SET pwd = '%s' WHERE username = '%s'",  
    mysql_real_escape_string($hashedpassword),  
    mysql_real_escape_string($username)
));

次に、パスワードが一致するかどうかを確認する場合は、上記とまったく同じ手順を実行して $hashedpassword 値を計算しますが、テスト パスワードを渡し、それを DB の内容と比較します。たとえば、次のようになります。

$result = mysql_query(sprintf("SELECT (pwd = '%s') AS authenticated FROM Login WHERE username = '%s'",
    mysql_real_escape_string($hashedpassword),
    mysql_real_escape_string($username)
));
$row = mysql_fetch_assoc($result);
if ($row['authenticated']) {
    echo "Success!";
}

とにかく、あなたはまだ始めたばかりのように見えるので、実際のパスワードの確認は慎重に行います。私が理解していることから、md5 の代わりに使用したいのは bcrypt2 ですが、PHP でそれを行う方法についてはお読みください。あなたは間違いなくこのことについて読むべきです.

ログインテーブルの構造も確認します。おそらく複数のユーザーが必要です。それ以外の場合は、DB ではなくコード自体にハッシュを格納しないのはなぜですか?

また、$_SERVER['REQUEST_METHOD'] == 'POST' をチェックすることで、誰かがフォームを送信しているか、フォームを取得しているかを判断できます。アプローチ...)

于 2012-04-24T05:06:56.740 に答える