2011-08-02 17 views
1

午後。基本的には、ユーザー名とパスワードの入力を求められるログインフォームのページがあります。次に、これらのユーザ名とパスワードのハッシュバージョンをMySQLのパスワードデータベースと照合します。PHPからのMySQLパスワードの比較

ハッカー/エクスポイターがどんなアイデアを持っているのか分かりませんが、正しいパスワードのハッシュバージョンをデータベースから取得してサーバー上で比較することは絶対にありません。私はGoogleとMySQLのチュートリアルのウェブサイトを精査したが、明確な答えを得られないようだ(私はここで浅い水に溺れているかもしれない)。基本的にこれは私がしたいことです:

  • ユーザー入力username + password。
  • 私はこの情報をストアドプロシージャを通じてMySQLに転送します。
  • ストアドプロシージャは、一致するものが見つかるとTRUE/FALSE(1または0は問題ありません)を返します。

ありがとうございます。

答えて

1

私はあなたが後にしているものはかなりわからないんだけど、私が正しく質問を理解している場合、あなたはこのような何かやりたい:「

SELECT password FROM users WHERE username = '$username'; 

をして、PHPでパスワードを比較し、そしてあなたこれがセキュリティ上の問題になる可能性があることを懸念しています。

私はセキュリティの観点から違いはないと思います。パスワードが正しいかどうかを確認する通常の方法は次のとおりです。

SELECT COUNT(*) FROM users WHERE username = '$username' AND password = '$hashedPassword'; 

count == 1の場合、ユーザーは正しいパスワードを指定しました。パスワードが一致しないと、MySQLはいつでも実際のパスワードを与えないことがわかります。たとえそうであったとしても、ハッカーがその情報にアクセスすることはほとんど不可能です。可能であれば、彼らはすでにあなたのサーバーをハイジャックしており、これはあなたの問題の中で最も少ないものです。

+0

イムは、現時点ではやって何だが、私はセキュリティが心配だったという。これが正当な答えとしてそれを受け入れることを喜んで私は非常に安全です。ありがとうございます:) –

+0

ええ、MySQLとPHP間のデータの受け渡しは安全です。 – JJJ

0

資格情報をデータベースに送信するときは、mysql_real_escape_stringを使用してください。これにより、SQLインジェクションが防止されます。

<?php 
// Connect 
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') 
    OR die(mysql_error()); 

// Query 
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", 
      mysql_real_escape_string($user), 
      mysql_real_escape_string($password)); 
?> 

http://www.php.net/manual/en/function.mysql-real-escape-string.php