2012-04-24 21 views
0

これは簡単です。私は、ユーザーに「ルート」パスワードを提供できる管理者権限を付与しようとしています。この新しく入力したパスワードとルートパスワードを比較する方法はありますか?これは私のコードは、これまでのように見えるものです:PHPは、私は(私は、Javaを好む)に慣れているよりも多くの異なるのでphp - パスワードを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> 

優しくしてください。 ありがとう!

+5

あなたは平文のパスワードを保存していますが、あなたはユーザー入力をエスケープしていません。これらは非常に危険なことです。戻って、パスワードのハッシュとソルトに関する基本的なチュートリアルを読んでください。また、コードを書く前にSQLインジェクションを避ける方法もあります。 – NullUserException

+0

@ NullUserException、説明できますか?私はそれが最高ではないことを知っていました、私はまだ学んでいます... – MellowFellow

+0

彼は優しい.... @MellowFellowになるように頼まれました:例えば、PDO抽象化を使ってmysql_real_escape_stringを使用するか、 –

答えて

2

あなたは間違いなくパスワードをハッシュすることを塩で考慮する必要があります。 md5()アルゴリズムは安全な環境にはお勧めできませんが、少なくとも仕事をもっと難しくしています。

データベースにパスワードを保存するとき、あなたは

$塩=「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) 
)); 

その後、パスワードが一致するかどうかを確認したいときに、まったく同じ操作を行います

$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!"; 
} 

Aaaanywayは、あなたがちょうど出始めているように見えるので、私は思います。例えば、$のhashedpassword値を計算するが、そのテスト・パスワードを渡した後、DBに何でそれを比較するために、上記のようにステップどのようにy実際のパスワードの確認が必要です。私はbcrypt2がmd5の代わりに使いたいものだと理解していますが、PHPでそれを行う方法を読んでおきます。あなたは間違いなくこのことを読むべきです。

また、ログインテーブルの構造も確認したいと思います。おそらく、その中に1人以上のユーザーがいればいいでしょう。そうでなければ、DBではなくコード自体にハッシュを格納するだけです。

また、$ _SERVER ['REQUEST_METHOD'] == 'POST'をチェックしてフォームを送信しているかどうかを判断できます。これはget URLパラメータを使用するよりもクリーンです(ただし、他の方法で間違っています...)

+0

多くの感謝の男、私は自分の時間を取った私にとって馴染みのないすべてのものを研究しました。それらのyoutubeのビデオがしないものを教えてくれてありがとう:D – MellowFellow

関連する問題