PHPとMySQLで
ログインするときに、ログインIDとパスワード(md5処理)を
入力する普通のログインページをつくったのですが
照合するときに例えば
ログインIDがphp
パスワードが178だとログインできず
ログインIDがabe
パスワードがabeだとログインできる
ログインIDがパスワード一致の場合だけ何故かログインできて
しまうのですが、自分で書いていてなんなんですが
以下のプログラムではそういう風になってしまうんでしょうか。
<?php
if($_POST["keep_login"] != ""){
session_set_cookie_params(365*25*3600);
}else{
session_set_cookie_params(0);
}
session_start();
require("config.php");
if($_POST["passwd"]==""){
$_POST["passwd"]=time();
}
if($_POST["action"]=="login"){
$login_id = mysql_real_escape_string($_POST["login_id"]);
$sql="select * from users where login_id= '$login_id' and state='0'";
$result=mysql_query($sql);
$users=mysql_fetch_array($result);
if($users["passwd"]==md5($_POST["passwd"])){
$_SESSION["login_id"]=$_POST["login_id"];
$_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]);
$_SESSION["name_kanji"]=$users["name_kanji"];
$sql="update users set login_date =
'".date('Y-m-d H:i:s')."' where login_id=
'".mysql_real_escape_string($_POST['login_id'])."' and state='0'";
$result=mysql_query($sql);
if($_GET["redirect"] !=""){
header("Location:".$_GET["redirect"]);
exit;
}else{
header("Location:".$site_url);
exit;
}
}else{
$message='<br><br><font color="red">ログインできませんでした</font><br>';
}
}
?>
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
【追記】
念のためですが、以下の事も試してみてください。
prit_r($_POST);
これは些細な事ですが、フォームからきちんと値が送られてきているかも疑問視できるからです。
私が良くやってしまうのは、単純にテキストのname属性が違っていたり同じ名前を入れていたりなど、案外些細な事でミスをしていたりするものですので。
maenet1972さんわざわざ調べていただき
真に申し訳ないです。
ありがとうございます。
やっと原因がわかりました。
というかお恥ずかしいイージーミスでした。
提案いたただいた事をやり、
NOとでて、prit_r($_POST);でやると
違うパスワードが表示しました。
そのあと、name属性など見ましたが、あっていました。
なので、登録時に問題があるとかもしれないと思い
登録phpをみると
$sql="insert into users(passwd)values('".md5($_POST["login"])."')";となっていました
なのでいままで、パスワード入力したと思っていたのは
md5したログインIDでした。(ハッシュしていなかったらすぐわかった問題なのですが笑)
なので、パスワードとログインIDがいっしょでないと
ログインできなかったようです。
maenet1972さんいままで親身にお付き合いいただき
真にありがとうございました。とても感謝しております。
イージーミスで情けないのですが、これからもがんばりたいとおもいます。
ほんとうにありがとうございました。
No.3
- 回答日時:
実際に私もやってみたのですが、md5($_POST["passwd"])の部分は特におかしな感じはしなかったですね。
----試しに"password"の文字をmd5でハッシュしてみました
<?
if($_POST['mode']=="md"){
$a="5f4dcc3b5aa765d61d8327deb882cf99";//passwordをmd5でハッシュ
if($a==md5($_POST['passwd'])){
echo "yes";
}else{
echo "NO";
}
}
?>
フォームから“password”の文字を入力して送信しても“yes”と表示されましたので、
md5($_POST['passwd'])は問題なく処理されているようです。
だとすると、逆に
if(md5($_POST["passwd"])=="13048e751550789e7bc0e0a0444bbbd5"){
でもfalseが返れば、
POSTデータのmd5と"13048e751550789e7bc0e0a0444bbbd5"は
根本的に違う事になりますが、こちらは試されましたでしょうか?
No.2
- 回答日時:
あ~なるほど、ログインIDがphpならパスワードもphpでないとログインできないという事ですね。
だとすると、単純にDBに保存されているログインIDとパスワードが同じものになってしまっているという事ではないんですかね(^^;
ログインできているという事は、DBからきちんと取得出来ている証拠ですし、、、。
原因究明として再評価と言いましたが、まずDBの中身を調べてみてはどうでしょうか?
この回答への補足
maenet1972さんお返事ありがとうございます。
DBをみてログインIDとパスワードが同じにはなっているのですが、
そうしないとログインできないので、
DBからきちんと取得出来ているかをもう一度検証したところ
(こんどはログインIDとパスワードは違う言葉です)
$users=mysql_fetch_array($result);の部分で
print_r($users["passwd"]);としたらちゃんとパスワードが
表示されました。
if($users["passwd"]==md5($_POST["passwd"])){
print_r($users["passwd"]);
とやると表示されませんでした。
ここが原因であることがわかりました。
ためしに、
md5($_POST["passwd"])部分を実際登録してあるmd5のパスワード
を"13048e751550789e7bc0e0a0444bbbd5"と入力すると
if($users["passwd"]=="13048e751550789e7bc0e0a0444bbbd5"){
ログインIDとパスワードが違ってもログインできました。
なので問題が
1.ログインIDとパスワードが同じでないとログインできない。
2.ログインIDとパスワードが違うときは、md5パスワード直接入力しないとログインできない。
md5($_POST["passwd"])が悪さしているのがわかるのですが
特別間違っているようには見えないので困りました。
No.1
- 回答日時:
POSTされたログイン名がphpだろうがabeだろうが、パスワードがabeならログインできてしまうという事ですか?
あくまでもこれは憶測なのですが、最初のrequire("config.php");の
config.phpの中身が何か悪さしているとか、、、
例えば、パスワードチェック「$users["passwd"]==md5($_POST["passwd"])){」の前にログインIDの中身を再評価させて処理させるとかしてみてはどうでしょうか?
この回答への補足
maenet1972さんありがとうございます。
abeでログインできるのではなく、
ログインIDがパスワード一致の場合だけ何故かログインできてしまって
IDがphpならパスワードphpにするとログインできてしまうのです
(それ以外はログインできませんでしたっとなってしまいます)
ID、パスワードの言葉はなんでもよくて、ただID、パスワードに両方とも同じ言葉が入っていないとログインできないということです。
説明がヘタで申し訳ないです。
config.phpの内容は、DBにコンタクトする事、キャラクターをutf8で送信する事、あとサイトのURLが書いてあるだけです。
すみません
再評価とは($users["login_id"]])==($_POST["login_id"])
みたいなことをやってみるればいいんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php ログイン 1 2022/11/01 00:24
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP php エラー 2 2022/10/23 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで[]の使い方について
-
BLOBでの画像表示について
-
DBで検索結果に該当するデータ...
-
sortable ギブアップです…助け...
-
while文の中にwhile文を書きた...
-
PHPでMySQLのデータを2次元配...
-
PHP 10件表示 "前へ" "次へ"
-
ユーザー名、パスで認証して、...
-
MySQLに保存した画像を表示したい
-
PHP と MySQL でテーブルの行数...
-
PHPについてなのですが未定義の...
-
MySQLでデータベースにデータin...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
ResultSetインターフェイスでの...
-
insert1つの処理でもトランザ...
-
csvをDBへ読み込んだら、NULLが...
-
JAVA SQLServerException 列名 ...
-
VB.NET
-
エラー3011
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
PHPで[]の使い方について
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
PHP、SQLite3のデーターでログ...
-
dbに登録したデータをphpのプル...
-
checkboxクリック時、SQLを実行...
-
PHPでMY SQLの連想配列をリンク...
-
文字化けが解決できません。お...
-
PHPでMySQLデータを呼び出し、w...
-
SELECT結果から動的にコンボボ...
-
php ログインフォーム作成
-
VBA初心者です。
-
チェックボックスでチェックし...
-
sortableを使用したデータのUPDATE
-
php mysqlで作ったデータをgoog...
-
mysql_insert_id()の使い方
-
PHPとSmartyを使い、データベー...
-
MySQLに保存した画像を表示したい
-
PHP+MySQLでの配列のinsert文に...
おすすめ情報