2012-02-14 12 views
0

ノート機能していません。PHPデータベースと比較すると、ハッシュが

  • を私はまだこのログインフォーム
  • をPHPにかなり新しいよ、私はパスワードをハッシュしていない場合は完全に正常に動作するようです。
  • 私はmd5、sha256を試しましたが、今はsha1に残しました。これらの作品はありません。
  • 私は最初にecho sha1("password");を使って自分のパスワードのハッシュを調べ、そのハッシュをコピーしてphpMyAdminで手作業で貼り付けました。これが問題なのかどうかは分かりません。

    <?php 
    session_start(); 
    require("config.php"); 
    
    if(isset($_POST['submit'])) { 
    
        $username = mysql_real_escape_string($_POST['username']); 
        $password = sha1(mysql_real_escape_string($_POST['password'])); 
    
        $loginsql = "SELECT * FROM login WHERE username = '" . $username . 
        "' AND password = '" . $password . "'"; 
        $loginresult = mysql_query($loginsql); 
        $loginnumrows = mysql_num_rows($loginresult); 
    
        if($loginnumrows == 1) { 
         $loginrow = mysql_fetch_assoc($loginresult); 
         session_register("USERNAME"); 
         session_register("USERID"); 
    
         $_SESSION['USERNAME'] = $loginrow['username']; 
         $_SESSION['USERID'] = $loginrow['id']; 
    
         header("Location: " . $config_basedir . "controlpanel.php"); 
        } 
        else{ 
         echo "<p>Incorrect Login, please try again!</p>"; 
        } 
    } 
    else{ 
    
    } 
    ?> 
    

    私は本当にこれで行くにはどこすぎてよく分からない:

はとにかく、ここのコードです。私のコードはより効率的かもしれないと確信していますが、私がノートで言及したように、私はパスワードをハッシュしないと動作します。読んでくれてありがとう。

+1

どのようにデータベース内の 'password'セットアップはありますか? –

+1

データがデータベースに送られる直前まで、 'mysql_real_escape_string'を使うべきではありません。特に、sha1($ _ POST ['password'])); 'はmysql_real_escape_string(sha1($ _ POST ['password'])))'でなければなりません。 *保存された*パスワードがどのようにハッシュされているかもわかりませんので、本当にお手伝いできません。レコードを選択し、パスワードを 'var_dump 'してみてください。これをサーバーにポストされている値と比較してください。これらは基本的なデバッグ手順です。 – meagar

+1

'$ password = sha1($ _ POST ['password']);'を試しましたか?ここにmysql_real_escape_stringは必要ありません。 – aletzo

答えて

1

パスワードをハッシュしないときに動作すると、パスワードが平文としてデータベースに保存されているように聞こえます。

もう1つのことは、mysql_real_escape文字列をsha1の反対側で使用して、正確な入力を妨げないようにすることです。

だから:mysql_real_escape_string(sha1($_POST['password'])); これは少し変わるかもしれません。

注:それは MySQLのエスケープせずにデータベースに直接入れても安全である必要があり、誰かが一度、常にデータベースに移行し、すべてがすべきことを確認するために私に言ったように、sha1のは、現在、任意の既知のセキュリティ上の問題はありませんがsha1やmd5のようなものにセキュリティ上の脆弱性が見つかった場合に備えてキャストしたりエスケープしたりしてください。

+0

それは私が問題かもしれないと思ったものですが、私はそれをどう変えるか分かりません。 – finec

+0

私は両方の場所でパスワードをハッシュしないと、それは動作すると信じています。 (dbとplaintext参照の平文を意味します) –

+0

申し訳ありませんが、あなたはsha1をコピーしてデータベースに入れていたことを忘れていました。 sha1を経由した後に 'echo $ password;'を実行してから、結果を取得してデータベースに挿入し、動作しているかどうかを確認します。 –

4

パスワードに'またはその他のエスケープ可能な文字が含まれていると、これは機能しません。あなたは脱出、その後、最初のハッシュすべき

$password = sha1(mysql_real_escape_string($_POST['password'])); 

:SHA1のみ[a-f0-9]が含まれているよう

$password = mysql_real_escape_string(sha1($_POST['password'])); 

そして、あなたにもescpaing

$password = sha1($_POST['password']); 
+0

これは最高の答えです。私は彼が逃げ出した後にハッシュしていたことに気づいた。 – LF4

+0

私はそれに言及するのを忘れましたが、私はすでにこれを試して、それは私の問題を修正していません。しかし、ありがとう。 – finec

1

をスキップすることができますそれはあなたのパスワードに思えますデータベースがハッシュされていない場合は、すべて同じハッシュ方式を使用するように、サインアップフォームを変更する必要があります。

データベース内のすべてのパスワードは、MySQL SHA1()機能を使用して変更できます。

0

エスケープされたパスワードは、入力されたパスワードと同じハッシュではありません。 hasには特殊文字は含まれません。

ABC 'SHA1!=エスケープABC \'​​ SHA1

関連する問題