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); ?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/10 12:45