質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

390閲覧

ログインシステムが機能しているか知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2017/08/10 11:45

passwordchecker.jsというライブラリを使わせていただいて、
ログインシステムの動作を確認しています。
その上で、見本通りに打ち込んで、IDとPASSが合っているはずなのに
ログインができません。
おかしいところの指摘をお願いしたいです。

passwordcheck.js

/* ライブラリ名: Password Checker バージョン: 1.0.1 ライセンス: http://www.websec-room.com/license パスワード強度判定 1:弱い 2:やや弱い 3:普通 4:やや強い 5:強い */ function getPasswordLevel(password) { var level = 0; var pattern = 0; var hasLower = false; var hasUpper = false; var hasCharacter = false; var hasNumber = false; for (i = 0; i < password.length; i++) { var ascii = password.charCodeAt(i); //アルファベット小文字チェック if ((ascii >= 97) && (ascii <= 122)) { hasLower = true; } //アルファベット大文字チェック if ((ascii >= 65) && (ascii <= 90)) { hasUpper = true; } //数値チェック if ((ascii >= 48) && (ascii <= 57)) { hasNumber = true; } //記号チェック if (((ascii >= 33) && (ascii <= 47)) || ((ascii >= 58) && (ascii <= 64)) || ((ascii >= 91) && (ascii <= 96)) || ((ascii >= 123) && (ascii <= 126))) { hasCharacter = true; } } //パターン判別 if (hasLower) {pattern++;} if (hasUpper) {pattern++;} if (hasNumber) {pattern++;} if (hasCharacter) {pattern++;} //パスワードレベル判定 //辞書に登録されている文字チェック var dictionary = ["password","qwerty","abc","admin","root","123"]; for (i = 0; i < dictionary.length; i++) { if (password.indexOf(dictionary[i]) != -1) { level = 1; return level; } } //数値のみパスワードチェック if (password.match(/^[0-9]+$/)) { level = 1; return level; } if (password.length < 8) { level = 1; } if ((password.length >= 8) && (password.length < 14)) { level = 2; } if ((password.length >= 8) && (password.length < 14) && (pattern >= 2)) { level = 3; } if ((password.length >= 8) && (password.length < 14) && (pattern >= 3)) { level = 4; } if ((password.length >= 14) && (pattern < 3)) { level = 3; } if ((password.length >= 14) && (pattern >= 3)) { level = 5; } return level; }

login.php

// phpinfo(); require_once("function.php"); session_start(); header("Content-type: text/html; charset=urf-8"); ?> <style> a{ text-decoration:none; } input{ border-radius: 10px; -webkit-border-radius: 10px; -moz-border-radius: 10px; } </style> <!DOCTYPE HTML> <html lang="ja"> <body> <h1>LOG IN</h1> <?php if($_SESSION["error_status"] == 1){ echo "<h2 style='color:red'>IDまたはパスワードが異なります</h2>"; } if($_SESSION["error_status"] == 2){ echo "<h2 style='color:red'>不正なリクエストです。</h2>"; } $_SESSION["error_status"] = 0; ?> <form action="login_check.php" method="post"> ID<br /><input type="text" name="id"><br /> PASS<br /><input type="password" name="password"><br /> <input type="submit" value="login"> <input type="reset" value="reset"><br /> </form> <a href="/register.php">新規登録</a><br /> <a href="/password_reset.php">パスワードリセット<br /> </body> </html>

login_check.php

<?php error_reporting(E_ALL); ini_set('display_errors', '1'); require_once("function.php"); session_start(); header("Content-type:text/html;charset=utf-8"); //パラメーター取得 $id = $_POST['id']; $password = $_POST['password']; //ログイン判定 //DB接続 ※ $dsn = 'mysql:dbname=portfolio;host=localhost;charset=utf8'; $user = 'root'; $password = ''; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //プレースホルダでSQL作成 $sql= "SELECT * FROM USERS WHERE ID =? AND IS_USER =1;"; //パラメータの型指定 $stmt = $dbh->prepare($sql,array('text')); //パラメータを渡してSQL実行 $rs = $stmt->execute(array($id)); $count= 0; while($row = $stmt->fetch()){ $id = $row["id"]; $salt = $row["salt"]; $db_password = $row["password"]; $reset = $row["reset"]; $count++; } $dbh = null; //ログイン失敗 if($count !=1){ $_SESSION["error_status"]=1; header("HTTP/1.1 301 Moved Permanently"); header("Location: login.php"); exit(); } //パスワードリセット対応 if($reset == 1){ $_SESSION["error_status"] =1; header("HTTP/1.1 301 Moved Permanently"); header("Location: login.php"); exit(); } //パスワード生成 $hash = stretchedPassword($salt,$password); if($hash == $db_password){ //ログイン成功 //セッション ID振り直し session_regenerate_id(true); //セッションにID格納 $_SESSION['id']=$id; //CSRFのトークン作成 $_SESSION["token"] = $get_csrf_token(); //DB接続 $dsn = 'mysql:dbname=portfolio;host=localhost;charset=utf8mb4'; $user = 'root'; $password = ''; $dbh = new PDO($dsn,$user,$password); $dbh->setAttrbute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //プレースホルダでSQL作成 $sql = "UPDATE USERS SET LAST_LOGIN_TIME = ? WHERE ID = ?"; //パラメータの型を指定 $stmt = $dbh->prepare($sql,array('timestamp','text')); //パラメータを渡してSQL実行 $stmt->execute(array(date('Y-m-d H:i:s'),$id)); $dbh = null; //リダイレクト header("HTTP/1.1 301 Moved Permanently"); header("Location: welcome.php"); }else{ $_SESSION["error_status"]=1; header("HTTP/1.1 301 Moved Permanently"); header("Location: login.php"); } print_r($_SESSION); ?>
Anfanger👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえずこれで

php

1$password = $_POST['password']; //DBのと被る????

php

1$pw = $_POST['password']; 2 3$hash = stretchedPassword($salt,$pw);

投稿2017/08/10 12:27

編集2017/08/10 12:28
momf

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/10 12:45

ありがとうございます! DB接続の部分が被っているのを見直さないで急いで投稿してしまいました・・・。申し訳ないです。 (まだちゃんと動作しないので見直し沢山いりますが・・・)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問