0, 'path' => '/', 'domain' => '', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]); session_start(); try { $option = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false ); $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); } catch(PDOException $e) { // 接続エラーのときエラー内容を取得する $error_message[] = $e->getMessage(); } //ログイン認証--------------------------------------------------- blockedIP($_SERVER['REMOTE_ADDR']); $is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user"); if(!($is_login === false)){ header("Location: /home/"); exit; } //------------------------------------------------------------- $serversettings_file = "server/serversettings.ini"; $serversettings = parse_ini_file($serversettings_file, true); //------------------------ $serverinfofile = 'server/info.txt'; $serverinfo = file_get_contents($serverinfofile); //------------------------------------- //------------------------- $softwarefile = "server/uwuzuinfo.txt"; $softwaredata = file_get_contents($softwarefile); $softwaredata = explode( "\n", $softwaredata ); $cnt = count( $softwaredata ); for( $i=0;$i<$cnt;$i++ ){ $uwuzuinfo[$i] = ($softwaredata[$i]); } //------------------------- $domain = $_SERVER['HTTP_HOST']; //------------------------ //パスワード試行回数制限------------------------------------------- if (!isset($_SESSION['login_passtry'])) { $_SESSION['login_passtry'] = 0; } //------------------------------------------------------------- if( !empty($_POST['btn_submit']) ) { $_SESSION['form_data'] = $_POST; $userid = safetext($_POST['userid']); $password = safetext($_POST['password']); if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){ if(isset($_POST['h-captcha-response'])){ $hcaptcha_token = safetext($_POST['h-captcha-response']); if($hcaptcha_token){ $captcha_data = [ 'secret' => safetext(H_CAPTCHA_SEAC_KEY), 'response' => $hcaptcha_token, 'sitekey' => safetext(H_CAPTCHA_SITE_KEY) ]; $options = [ 'http' => [ 'method'=> 'POST', 'header'=> 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query($captcha_data, '', '&') ] ]; $hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true); if(!($hCaptcha_result["success"] == true)){ $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)"; } }else{ $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)"; } }else{ $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)"; } } if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){ if(isset($_POST['cf-turnstile-response'])){ $CF_Turnstile_token = safetext($_POST['cf-turnstile-response']); if($CF_Turnstile_token){ $CF_Turnstile_data = [ 'secret' => safetext(CF_TURNSTILE_SEAC_KEY), 'response' => $CF_Turnstile_token ]; $CF_Turnstile_options = [ 'http' => [ 'method'=> 'POST', 'header'=> 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query($CF_Turnstile_data, '', '&') ] ]; $CF_Turnstile_result = json_decode(file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create($CF_Turnstile_options)),true); if(!($CF_Turnstile_result["success"] == true)){ $error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)"; } }else{ $error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)"; } }else{ $error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)"; } } $options = array( // SQL実行失敗時に例外をスルー PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // デフォルトフェッチモードを連想配列形式に設定 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減) // SELECTで得た結果に対してもrowCountメソッドを使えるようにする PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); $result = $dbh->prepare("SELECT userid, password, loginid, authcode FROM account WHERE userid = :userid"); $result->bindValue(':userid', $userid); // SQL実行 $result->execute(); if( empty($userid) ) { $error_message[] = 'ユーザーIDを入力してください。(USERID_INPUT_PLEASE)'; } else { if(!(preg_match("/^[a-zA-Z0-9_]+$/", $userid))){ $error_message[] = "IDは半角英数字で入力してください。(「_」は使用可能です。)(USERID_DONT_USE_WORD)"; } if( empty($password) ) { $error_message[] = 'パスワードを入力してください。(PASSWORD_INPUT_PLEASE)'; } if(empty($error_message)){ if ($_SESSION["login_passtry"] <= 5) { $delay = $_SESSION["login_passtry"] * 2; } else { $delay = min(pow(2, $_SESSION["login_passtry"] - 2), 60); } sleep($delay); if($result->rowCount() > 0) { $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する if(strtolower($row["userid"]) == strtolower($userid)){ if(uwuzu_password_verify($password,$row["password"])){ if(empty($row["authcode"])){ $_SESSION['userid'] = $userid; $_SESSION["login_passtry"] = 0; $_SESSION['form_data'] = array();//フォーム初期化 // リダイレクト先のURLへ転送する $url = 'check.php'; header('Location: ' . $url, true, 303); // すべての出力を終了 exit; }else{ $_SESSION['userid'] = $userid; $_SESSION["login_passtry"] = 0; $_SESSION['form_data'] = array();//フォーム初期化 $url = 'authlogin.php'; header('Location: ' . $url, true, 303); // すべての出力を終了 exit; } }else{ $_SESSION["login_passtry"]++; $error_message[] = 'IDまたはパスワードが違います(PASS_AND_ID_CHIGAUYANKE)'; } }else{ $_SESSION["login_passtry"]++; $error_message[] = 'IDまたはパスワードが違います(PASS_AND_ID_CHIGAUYANKE)'; } }else { $_SESSION["login_passtry"]++; $error_message[] = 'IDまたはパスワードが違います(PASS_AND_ID_CHIGAUYANKE)'; } } } } // データベースの接続を閉じる $pdo = null; ?>
"> にログイン"> "> "> "/>