0

私の問題は解決しました。これ以上の回答は期待していません。ですから、反対票を投じないでください。他の投稿に賛成票を投じるには、いくつかの評判が必要だからです。ありがとう

ログインシステムに使用しようとしmd5()ましたが、パスワードが暗号化されません。データベースに元のパスワードが表示されます。これが私のコードです:

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername']; 
$mypassword=md5($_POST['mypassword']); 



$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
header("location:login.html");
}
?>

コードを編集して$mypassword=md5($_POST['mypassword']);

4

6 に答える 6

9

md5d パスワードを印刷し、挿入前に変数に保存しました

$mypassword = md5($_POST['mypassword']);
$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

あなたのロジックには問題があると思います。パスワードを暗号化された形式で保存していますか? その場合、この選択コマンドでデータをフェッチできるのはあなただけです。それ以外の場合$count=mysql_num_rows($result);は常にゼロです

そしてこちらもご覧ください

PHP で mysql_* 関数を使用してはいけないのはなぜですか?

于 2012-11-30T10:14:33.840 に答える
3
SELECT MD5('testing'); 

例えば

$sql="select * from $tbl_name where username='$myusername' and password=MD5($mypassword)";

あなたのSQLで

于 2012-11-30T10:15:26.393 に答える
3

パスワードの無塩 MD5 ハッシュを保存することは、それらをプレーンテキストで保存することとほとんど同じです。既製のハードウェアを使用すると、1 秒あたり 8 ギガのパスワードを試すことができます。つまり、約 500,000 語の辞書全体を 1 ミリ秒未満で総当たり攻撃できます。

さらに、ソルトなしで MD5 用に事前計算されたハッシュ テーブルが大量にあるため、自分のパスワードの MD5 ハッシュを取得し、それを Google に入力して、元のパスワードが何であったかを確認するか、そうしない方がよいかもしれません...

そのため、最近ではBCryptのような遅い鍵導出関数を使用する必要があります。PHP 5.5 には独自の機能がpassword_hash()ありpassword_verify()、このタスクを簡素化する準備ができています。PHP 5.3/5.4 用の互換パックが利用可能で、 password_compatからダウンロードできます。

このチュートリアルでは、パスワードを正しくハッシュする方法について詳しく説明します。

于 2012-11-30T12:07:23.420 に答える
1

mysqliまたはを使用することをお勧めしますPDO。md5dパスワードを出力したばかりです。その値を特定の変数に格納し、その変数をクエリに使用する必要があります。これを行うには、これを試してください。

<?php 
mysql_connect("$host", "$username", "$password") or die("cannot connect"); 

mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$newpassword = md5($mypassword);

$sql="select * from $tbl_name where username='".$myusername."' and password='".$mypassword."'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1)
{
    session_register("myusername");
    session_register("mypassword"); 
    header("location:login_success.php");
}
else {
    header("location:login.html");
}
?>
于 2012-11-30T10:53:47.310 に答える
1

SQLインジェクションをブロックするには、文字列をエスケープする必要があります。少なくとも使用してmysql_real_escape_string()ください。また、MD5は使用せず、Sha1を使用してください。

$mypassword = sha1($_POST['mypassword']);
$myusername = mysql_real_escape_string($_POST['myusername']);
$sql="select * from $tbl_name where username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
于 2012-11-30T10:19:04.213 に答える
1

暗号化されたパスワードをエコーし​​て出力するだけです:

echo md5($mypassword);

あなたが望むのはに割り当てることです$mypassword

$mypassword = md5($mypassword);
于 2012-11-30T10:13:47.083 に答える