diff --git a/abi/addabi.php b/abi/addabi.php index 6766577..021a307 100644 --- a/abi/addabi.php +++ b/abi/addabi.php @@ -1,40 +1,40 @@ -beginTransaction(); - - $stmt = $pdo->prepare("UPDATE ueuse SET abi = :abi, abidate = :abidate WHERE uniqid = :uniqid"); - $stmt->bindValue(':abi', $abitext, PDO::PARAM_STR); - $stmt->bindValue(':abidate', $abidate, PDO::PARAM_STR); - $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $pdo->commit(); - - if ($res) { - header('Content-Type: application/json'); - echo json_encode(['success' => true]); - exit; - } else { - header('Content-Type: application/json'); - echo json_encode(['success' => false, 'error' => '追加に失敗しました。']); - exit; - } - } catch(PDOException $e) { - header('Content-Type: application/json'); - echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); - exit; - } -} -?> +beginTransaction(); + + $stmt = $pdo->prepare("UPDATE ueuse SET abi = :abi, abidate = :abidate WHERE uniqid = :uniqid"); + $stmt->bindValue(':abi', $abitext, PDO::PARAM_STR); + $stmt->bindValue(':abidate', $abidate, PDO::PARAM_STR); + $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $pdo->commit(); + + if ($res) { + header('Content-Type: application/json'); + echo json_encode(['success' => true]); + exit; + } else { + header('Content-Type: application/json'); + echo json_encode(['success' => false, 'error' => '追加に失敗しました。']); + exit; + } + } catch(PDOException $e) { + header('Content-Type: application/json'); + echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); + exit; + } +} +?> diff --git a/addauthcode.php b/addauthcode.php new file mode 100644 index 0000000..5fc9c8d --- /dev/null +++ b/addauthcode.php @@ -0,0 +1,224 @@ + 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(); +} + +require_once 'authcode/GoogleAuthenticator.php'; + +if(empty($_SESSION['secretcode'])){ + $authcode = new PHPGangsta_GoogleAuthenticator(); + $secret = $authcode->createSecret(); + $_SESSION['secretcode'] = $secret; +}else{ + $authcode = new PHPGangsta_GoogleAuthenticator(); + $secret = $_SESSION['secretcode']; +} + +if( !empty($_POST['btn_submit']) ) { + $chkauthcode = new PHPGangsta_GoogleAuthenticator(); + //二段階認証の確認 + $userauthcode = $_POST['usercode']; + + $discrepancy = 2; + + $checkResult = $chkauthcode->verifyCode($secret, $userauthcode, $discrepancy); + if ($checkResult) { + if( empty($error_message) ) { + $secret = $_SESSION['secretcode']; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET authcode = :authcode WHERE userid = :userid"); + + $stmt->bindValue(':authcode', $secret, PDO::PARAM_STR); + + // ユーザーIDのバインド(WHERE句に必要) + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + if (isset($_SERVER['HTTP_COOKIE'])) { + $cookies = explode(';', $_SERVER['HTTP_COOKIE']); + foreach($cookies as $cookie) { + $parts = explode('=', $cookie); + $name = trim($parts[0]); + setcookie($name, '', time()-1000); + setcookie($name, '', time()-1000, '/'); + } + } + $userid = ""; + // リダイレクト先のURLへ転送する + $url = 'success.php'; + header('Location: ' . $url, true, 303); + exit; + } else { + $error_message[] = '更新に失敗しました。'; + } + + // プリペアドステートメントを削除 + $stmt = null; + } + } else { + $error_message[] = "二段階認証が出来ませんでした。再度お試しください。"; + } +} + + + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +アカウント登録 - <?php echo file_get_contents($servernamefile);?> + + + + + + + +
+ + +
+

二段階認証

+ +

以下の二次元コードより二段階認証をセットアップしてください。

+

セットアップが完了したら入力ボックスにコードを入力して「次へ」ボタンを押してください!
注意:まだ二段階認証の設定は終わっていません。次へを押すと設定が完了します。

+ + + + + + getQRCodeGoogleUrl($name, $secret, $title); + ?> +
+ +
+ +
+
+

二段階認証コード

+
先程セットアップして出力された6桁のコードを入力してください。
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/api/userdata-api.php b/api/userdata-api.php index c9c77c2..830c928 100644 --- a/api/userdata-api.php +++ b/api/userdata-api.php @@ -1,75 +1,75 @@ - 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(); - } - - - if (!empty($pdo)) { - - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - - $userQuery = $pdo->prepare("SELECT username,profile,datetime,follow,follower FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $search); - $userQuery->execute(); - $userdata = $userQuery->fetch(); - } -if (empty($userdata)){ - $response = array( - 'error_code' => "userid_not_found", - ); -}else{ - $followcnts = explode(',', $userdata["follow"]); - $userdata["follow_cnt"] = count($followcnts)-1; - - $followercnts = explode(',', $userdata["follower"]); - $userdata["follower_cnt"] = count($followercnts)-1; - - $response = array( - 'user_name' => $userdata["username"], - 'profile' => $userdata["profile"], - 'registered_date' => $userdata["datetime"], - 'follow' => $userdata["follow"], - 'follow_cnt' => $userdata["follow_cnt"], - 'follower' => $userdata["follower"], - 'follower_cnt' => $userdata["follower_cnt"], - ); -} -echo json_encode($response); - -}else{ - - $err = "input_not_found"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response); -} + 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(); + } + + + if (!empty($pdo)) { + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $userQuery = $pdo->prepare("SELECT username,profile,datetime,follow,follower FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $search); + $userQuery->execute(); + $userdata = $userQuery->fetch(); + } +if (empty($userdata)){ + $response = array( + 'error_code' => "userid_not_found", + ); +}else{ + $followcnts = explode(',', $userdata["follow"]); + $userdata["follow_cnt"] = count($followcnts)-1; + + $followercnts = explode(',', $userdata["follower"]); + $userdata["follower_cnt"] = count($followercnts)-1; + + $response = array( + 'user_name' => htmlentities($userdata["username"]), + 'profile' => htmlentities($userdata["profile"]), + 'registered_date' => htmlentities($userdata["datetime"]), + 'follow' => htmlentities($userdata["follow"]), + 'follow_cnt' => htmlentities($userdata["follow_cnt"]), + 'follower' => htmlentities($userdata["follower"]), + 'follower_cnt' => htmlentities($userdata["follower_cnt"]), + ); +} +echo json_encode($response, JSON_UNESCAPED_UNICODE);; + +}else{ + + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} ?> \ No newline at end of file diff --git a/authcode/GoogleAuthenticator.php b/authcode/GoogleAuthenticator.php new file mode 100644 index 0000000..bf7d116 --- /dev/null +++ b/authcode/GoogleAuthenticator.php @@ -0,0 +1,252 @@ +_getBase32LookupTable(); + + // Valid secret lengths are 80 to 640 bits + if ($secretLength < 16 || $secretLength > 128) { + throw new Exception('Bad secret length'); + } + $secret = ''; + $rnd = false; + if (function_exists('random_bytes')) { + $rnd = random_bytes($secretLength); + } elseif (function_exists('mcrypt_create_iv')) { + $rnd = mcrypt_create_iv($secretLength, MCRYPT_DEV_URANDOM); + } elseif (function_exists('openssl_random_pseudo_bytes')) { + $rnd = openssl_random_pseudo_bytes($secretLength, $cryptoStrong); + if (!$cryptoStrong) { + $rnd = false; + } + } + if ($rnd !== false) { + for ($i = 0; $i < $secretLength; ++$i) { + $secret .= $validChars[ord($rnd[$i]) & 31]; + } + } else { + throw new Exception('No source of secure random'); + } + + return $secret; + } + + /** + * Calculate the code, with given secret and point in time. + * + * @param string $secret + * @param int|null $timeSlice + * + * @return string + */ + public function getCode($secret, $timeSlice = null) + { + if ($timeSlice === null) { + $timeSlice = floor(time() / 30); + } + + $secretkey = $this->_base32Decode($secret); + + // Pack time into binary string + $time = chr(0).chr(0).chr(0).chr(0).pack('N*', $timeSlice); + // Hash it with users secret key + $hm = hash_hmac('SHA1', $time, $secretkey, true); + // Use last nipple of result as index/offset + $offset = ord(substr($hm, -1)) & 0x0F; + // grab 4 bytes of the result + $hashpart = substr($hm, $offset, 4); + + // Unpak binary value + $value = unpack('N', $hashpart); + $value = $value[1]; + // Only 32 bits + $value = $value & 0x7FFFFFFF; + + $modulo = pow(10, $this->_codeLength); + + return str_pad($value % $modulo, $this->_codeLength, '0', STR_PAD_LEFT); + } + + /** + * Get QR-Code URL for image, from google charts. + * + * @param string $name + * @param string $secret + * @param string $title + * @param array $params + * + * @return string + */ + public function getQRCodeGoogleUrl($name, $secret, $title = null, $params = array()) + { + $width = !empty($params['width']) && (int) $params['width'] > 0 ? (int) $params['width'] : 200; + $height = !empty($params['height']) && (int) $params['height'] > 0 ? (int) $params['height'] : 200; + $level = !empty($params['level']) && array_search($params['level'], array('L', 'M', 'Q', 'H')) !== false ? $params['level'] : 'M'; + + $urlencoded = urlencode('otpauth://totp/'.$name.'?secret='.$secret.''); + if (isset($title)) { + $urlencoded .= urlencode('&issuer='.urlencode($title)); + } + + return "https://api.qrserver.com/v1/create-qr-code/?data=$urlencoded&size=${width}x${height}&ecc=$level"; + } + + /** + * Check if the code is correct. This will accept codes starting from $discrepancy*30sec ago to $discrepancy*30sec from now. + * + * @param string $secret + * @param string $code + * @param int $discrepancy This is the allowed time drift in 30 second units (8 means 4 minutes before or after) + * @param int|null $currentTimeSlice time slice if we want use other that time() + * + * @return bool + */ + public function verifyCode($secret, $code, $discrepancy = 1, $currentTimeSlice = null) + { + if ($currentTimeSlice === null) { + $currentTimeSlice = floor(time() / 30); + } + + if (strlen($code) != 6) { + return false; + } + + for ($i = -$discrepancy; $i <= $discrepancy; ++$i) { + $calculatedCode = $this->getCode($secret, $currentTimeSlice + $i); + if ($this->timingSafeEquals($calculatedCode, $code)) { + return true; + } + } + + return false; + } + + /** + * Set the code length, should be >=6. + * + * @param int $length + * + * @return PHPGangsta_GoogleAuthenticator + */ + public function setCodeLength($length) + { + $this->_codeLength = $length; + + return $this; + } + + /** + * Helper class to decode base32. + * + * @param $secret + * + * @return bool|string + */ + protected function _base32Decode($secret) + { + if (empty($secret)) { + return ''; + } + + $base32chars = $this->_getBase32LookupTable(); + $base32charsFlipped = array_flip($base32chars); + + $paddingCharCount = substr_count($secret, $base32chars[32]); + $allowedValues = array(6, 4, 3, 1, 0); + if (!in_array($paddingCharCount, $allowedValues)) { + return false; + } + for ($i = 0; $i < 4; ++$i) { + if ($paddingCharCount == $allowedValues[$i] && + substr($secret, -($allowedValues[$i])) != str_repeat($base32chars[32], $allowedValues[$i])) { + return false; + } + } + $secret = str_replace('=', '', $secret); + $secret = str_split($secret); + $binaryString = ''; + for ($i = 0; $i < count($secret); $i = $i + 8) { + $x = ''; + if (!in_array($secret[$i], $base32chars)) { + return false; + } + for ($j = 0; $j < 8; ++$j) { + $x .= str_pad(base_convert(@$base32charsFlipped[@$secret[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT); + } + $eightBits = str_split($x, 8); + for ($z = 0; $z < count($eightBits); ++$z) { + $binaryString .= (($y = chr(base_convert($eightBits[$z], 2, 10))) || ord($y) == 48) ? $y : ''; + } + } + + return $binaryString; + } + + /** + * Get array with all 32 characters for decoding from/encoding to base32. + * + * @return array + */ + protected function _getBase32LookupTable() + { + return array( + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 7 + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15 + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23 + 'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31 + '=', // padding char + ); + } + + /** + * A timing safe equals comparison + * more info here: http://blog.ircmaxell.com/2014/11/its-all-about-time.html. + * + * @param string $safeString The internal (safe) value to be checked + * @param string $userString The user submitted (unsafe) value + * + * @return bool True if the two strings are identical + */ + private function timingSafeEquals($safeString, $userString) + { + if (function_exists('hash_equals')) { + return hash_equals($safeString, $userString); + } + $safeLen = strlen($safeString); + $userLen = strlen($userString); + + if ($userLen != $safeLen) { + return false; + } + + $result = 0; + + for ($i = 0; $i < $userLen; ++$i) { + $result |= (ord($safeString[$i]) ^ ord($userString[$i])); + } + + // They are only identical strings if $result is exactly 0... + return $result === 0; + } +} diff --git a/authcodechk.php b/authcodechk.php new file mode 100644 index 0000000..424d95a --- /dev/null +++ b/authcodechk.php @@ -0,0 +1,159 @@ + 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(); +} + +if( !empty($_POST['btn_submit']) ) { + $_SESSION['userid'] = $userid; + // リダイレクト先のURLへ転送する + $url = 'addauthcode.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; +} + +if( !empty($_POST['skip_submit']) ) { + if (isset($_SERVER['HTTP_COOKIE'])) { + $cookies = explode(';', $_SERVER['HTTP_COOKIE']); + foreach($cookies as $cookie) { + $parts = explode('=', $cookie); + $name = trim($parts[0]); + setcookie($name, '', time()-1000); + setcookie($name, '', time()-1000, '/'); + } + } + $userid = ""; + // リダイレクト先のURLへ転送する + $url = 'success.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; +} + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +アカウント登録 - <?php echo file_get_contents($servernamefile);?> + + + + + + + +
+ + +
+

二段階認証

+ +

二段階認証を設定しますか?

+

二段階認証を設定することによりログイン時の一時キーが必要となりセキュリティを強化することが出来ます。
設定にはGoogleAuthenticatorなどの二段階認証アプリが必要です。

+ + + + + +
+ + +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/authlogin.php b/authlogin.php new file mode 100644 index 0000000..9955a46 --- /dev/null +++ b/authlogin.php @@ -0,0 +1,182 @@ + 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, $options); +} catch(PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = 'データベース接続エラー: ' . $e->getMessage(); +} + + +if( !empty($_POST['btn_submit']) ) { + + $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, $options); + + require_once 'authcode/GoogleAuthenticator.php'; + + $result = $dbh->prepare("SELECT authcode,loginid,username FROM account WHERE userid = :userid"); + + $result->bindValue(':userid', $userid); + // SQL実行 + $result->execute(); + if($result->rowCount() > 0) { + $row = $result->fetch(); + + $tousercode = $row["authcode"]; + + $chkauthcode = new PHPGangsta_GoogleAuthenticator(); + + $userauthcode = $_POST['usercode']; + + if(empty($userauthcode)){ + $error_message[] = "コードを入力してください。"; + }else{ + + $discrepancy = 2; + + $checkResult = $chkauthcode->verifyCode($tousercode, $userauthcode, $discrepancy); + if ($checkResult) { + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['loginid'] = $row["loginid"]; + + $_SESSION['username'] = $row["username"]; + $_SESSION['password'] = ""; + + // リダイレクト先のURLへ転送する + $url = '/home'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + + }else { + $error_message[] = '二段階認証が出来ませんでした。再度お試しください。'; + } + } + }else{ + $error_message[] = 'データの取得が出来ませんでした。再度お試しください。'; + } + +} + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +ログイン - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
+

二段階認証

+ +

二段階認証コードを入力してください。

+ + + + + +
+
+

二段階認証コード

+
6桁のコードを入力してください。
+ +
+ +
+ +
+ 戻る +
+
+
+ + + + + + + \ No newline at end of file diff --git a/check.php b/check.php index 1584fe0..9df1ee0 100644 --- a/check.php +++ b/check.php @@ -167,7 +167,7 @@ $pdo = null;

確認

-

あなたは ですか?

+

あなたは ですか?

', $markdownText); - - // 画像(#img)をHTMLのimgタグに変換 - $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); - - // タイトル(#、##、###)をHTMLのhタグに変換 - $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); - - // 箇条書き(-)をHTMLのul/liタグに変換 - $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); - - // 空行の前に何もない行をHTMLのpタグに変換 - $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); - - return $markdownText; -} - -$sterms = explode("\n", $termsdata); -$htmltext = ''; // 初期化 - -foreach ($sterms as $terms) { - $markdowntext = $terms; - $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); - $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 -} - - -?> - - - - - - - - -サーバー停止 - <?php echo file_get_contents($servernamefile);?> - - - - - -
- -
- -
- -
-
-
-

サーバー停止中

-

(/´・ヮ・`\)
現在サーバーが管理者によって停止されています...
停止の理由は以下の通りです。

- -
-

- - -
- -
- - - - + + + + + + + +サーバー停止 - ゆずさば + + + + + +
+ +
+ +
+ +
ゆずさば
+
uwuzu.net
+
+

サーバー停止中

+

(/´・ヮ・`\)
現在サーバーが管理者によって停止されています...
停止の理由は以下の通りです。

+ +
+

あまりにも脆弱すぎたためサービスを止めさせていただきました。
復旧の目処はたっておりません。

+ + +
+ +
+ + + + \ No newline at end of file diff --git a/favorite/favorite.php b/favorite/favorite.php index f2b17fa..bdb7436 100644 --- a/favorite/favorite.php +++ b/favorite/favorite.php @@ -1,57 +1,57 @@ -prepare("SELECT favorite FROM ueuse WHERE uniqid = :uniqid"); - $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $stmt->execute(); - $post = $stmt->fetch(PDO::FETCH_ASSOC); - - if ($post) { - $favoriteList = explode(',', $post['favorite']); - $index = array_search($userId, $favoriteList); - - if ($index === false) { - // ユーザーIDを追加 - $favoriteList[] = $userId; - } else { - // ユーザーIDを削除 - array_splice($favoriteList, $index, 1); - } - - // 新しいいいね情報を更新 - $newFavorite = implode(',', $favoriteList); - $updateQuery = $pdo->prepare("UPDATE ueuse SET favorite = :favorite WHERE uniqid = :uniqid"); - $updateQuery->bindValue(':favorite', $newFavorite, PDO::PARAM_STR); - $updateQuery->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $res = $updateQuery->execute(); - - if ($res) { - echo json_encode(['success' => true, 'newFavorite' => $newFavorite]); - exit; - } else { - echo json_encode(['success' => false, 'error' => 'いいねの更新に失敗しました。']); - exit; - } - - - } else { - echo json_encode(['success' => false, 'error' => '投稿が見つかりません。']); - exit; - } - } catch(PDOException $e) { - echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); - exit; - } -} else { - echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']); - exit; -} -?> +prepare("SELECT favorite FROM ueuse WHERE uniqid = :uniqid"); + $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + $stmt->execute(); + $post = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($post) { + $favoriteList = explode(',', $post['favorite']); + $index = array_search($userId, $favoriteList); + + if ($index === false) { + // ユーザーIDを追加 + $favoriteList[] = $userId; + } else { + // ユーザーIDを削除 + array_splice($favoriteList, $index, 1); + } + + // 新しいいいね情報を更新 + $newFavorite = implode(',', $favoriteList); + $updateQuery = $pdo->prepare("UPDATE ueuse SET favorite = :favorite WHERE uniqid = :uniqid"); + $updateQuery->bindValue(':favorite', $newFavorite, PDO::PARAM_STR); + $updateQuery->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + $res = $updateQuery->execute(); + + if ($res) { + echo json_encode(['success' => true, 'newFavorite' => $newFavorite]); + exit; + } else { + echo json_encode(['success' => false, 'error' => 'いいねの更新に失敗しました。']); + exit; + } + + + } else { + echo json_encode(['success' => false, 'error' => '投稿が見つかりません。']); + exit; + } + } catch(PDOException $e) { + echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); + exit; + } +} else { + echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']); + exit; +} +?> diff --git a/home/index.php b/home/index.php index 793a49f..41c96db 100644 --- a/home/index.php +++ b/home/index.php @@ -112,7 +112,7 @@ if(empty($username)){ if( !empty($_POST['btn_submit']) ) { - $ueuse = $_POST['ueuse']; + $ueuse = htmlentities($_POST['ueuse']); // メッセージの入力チェック if( empty($ueuse) ) { @@ -146,7 +146,15 @@ if( !empty($_POST['btn_submit']) ) { if ($result) { $photo1 = $uploadedPath; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!(1)エラーコード:' . $uploadedFile['error'].'
'.var_dump($_FILES['upload_images']); + $errnum = $uploadedFile['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } @@ -178,7 +186,15 @@ if( !empty($_POST['btn_submit']) ) { if ($result2) { $photo2 = $uploadedPath2; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!(2)エラーコード:' . $uploadedFile2['error'].'
'.var_dump($_FILES['upload_images']); + $errnum = $uploadedFile2['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } @@ -206,7 +222,15 @@ if( !empty($_POST['btn_submit']) ) { if ($result3) { $video1 = $uploadedPath3; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!エラーコード:' . $uploadedFile3['error']; + $errnum = $uploadedFile3['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } else { $error_message[] = '対応していないファイル形式です!'; diff --git a/home/tlimage.php b/home/tlimage.php index 2e4998b..9c06b75 100644 --- a/home/tlimage.php +++ b/home/tlimage.php @@ -1,78 +1,78 @@ - PDO::ERRMODE_EXCEPTION, - PDO::MYSQL_ATTR_MULTI_STATEMENTS => false -); -$pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - - -//$row['userid'] = "daichimarukn"; - -$userid = $_GET['account']; - - -$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, -); - -if( empty($userid) ) { - $filePath = 'img/deficon/icon.png'; - $data = file_get_contents($filePath); - header('Content-type: image/png'); - //データを出力 - echo $data; - exit(); -}else{ - $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - - - $result = $dbh->prepare("SELECT iconname, iconcontent, icontype, iconsize profile FROM account WHERE userid = :userid"); - - $result->bindValue(':userid', $userid); - // SQL実行 - $result->execute(); - - - $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する - - - - header('Content-type: ' . $row['icontype']); - echo $row['iconcontent']; - exit(); + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false +); +$pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + + +//$row['userid'] = "daichimarukn"; + +$userid = htmlentities($_GET['account']); + + +$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, +); + +if( empty($userid) ) { + $filePath = 'img/deficon/icon.png'; + $data = file_get_contents($filePath); + header('Content-type: image/png'); + //データを出力 + echo $data; + exit(); +}else{ + $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + + + $result = $dbh->prepare("SELECT iconname, iconcontent, icontype, iconsize profile FROM account WHERE userid = :userid"); + + $result->bindValue(':userid', $userid); + // SQL実行 + $result->execute(); + + + $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する + + + + header('Content-type: ' . $row['icontype']); + echo $row['iconcontent']; + exit(); } \ No newline at end of file diff --git a/image.php b/image.php index e40c66d..c6e3564 100644 --- a/image.php +++ b/image.php @@ -1,77 +1,77 @@ - 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); - - -//$row['userid'] = "daichimarukn"; - -$userid = $_SESSION['userid']; - - -$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, -); - -if( empty($userid) ) { - $filePath = 'img/deficon/icon.png'; - $data = file_get_contents($filePath); - header('Content-type: image/png'); - //データを出力 - echo $data; - exit(); -}else{ - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - - - $result = $dbh->prepare("SELECT iconname, iconcontent, icontype, iconsize profile FROM account WHERE userid = :userid"); - - $result->bindValue(':userid', $userid); - // SQL実行 - $result->execute(); - - - $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する - - - - header('Content-type: ' . $row['icontype']); - echo $row['iconcontent']; - exit(); + 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); + + +//$row['userid'] = "daichimarukn"; + +$userid = $_SESSION['userid']; + + +$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, +); + +if( empty($userid) ) { + $filePath = 'img/deficon/icon.png'; + $data = file_get_contents($filePath); + header('Content-type: image/png'); + //データを出力 + echo $data; + exit(); +}else{ + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + + + $result = $dbh->prepare("SELECT iconname, iconcontent, icontype, iconsize profile FROM account WHERE userid = :userid"); + + $result->bindValue(':userid', $userid); + // SQL実行 + $result->execute(); + + + $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する + + + + header('Content-type: ' . $row['icontype']); + echo $row['iconcontent']; + exit(); } \ No newline at end of file diff --git a/img/タイトルなし.png b/img/タイトルなし.png new file mode 100644 index 0000000..d3100c6 Binary files /dev/null and b/img/タイトルなし.png differ diff --git a/index.php b/index.php index 4eb65e7..a746583 100644 --- a/index.php +++ b/index.php @@ -1,145 +1,213 @@ - - - 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); - - $stmt = $pdo->prepare("SELECT COUNT(userid) FROM account"); - $stmt->execute(); - $count2 = $stmt->fetchColumn(); - - -} catch(PDOException $e) { - - // 接続エラーのときエラー内容を取得する - $error_message[] = $e->getMessage(); -} - -mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); -$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); - -$result = $mysqli->query("SELECT userid FROM account ORDER BY datetime"); - -/* 結果セットの行数を取得します */ -$count1 = $result->num_rows; - -$result2 = $mysqli->query("SELECT uniqid FROM ueuse ORDER BY datetime"); - -/* 結果セットの行数を取得します */ -$count2 = $result2->num_rows; - -?> - - - - - - - - - - -<?php echo file_get_contents($servernamefile);?> - - - - - - - - - -
- - -
- - - - - -

へようこそ!

-
-
- -

'; - }?>

- - お問い合わせ : - -
-
-
ユーザー数
-

"?>

-
-
-
投稿数
-

"?>

-
-
- - - - -
-
- - - + + + 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(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + header("Location: home/index.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + header("Location: home/index.php"); + exit; + } + + +} + + +$servernamefile = "server/servername.txt"; + +//------------------------ + +$serverinfofile = 'server/info.txt'; +$serverinfo = file_get_contents($serverinfofile); + +//------------------------------------- + +$domain = $_SERVER['HTTP_HOST']; + +//------------------------ + +$contactfile = "server/contact.txt"; + +//------------------------ + +$onlyuserfile = "server/onlyuser.txt"; +$onlyuser = file_get_contents($onlyuserfile); + +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); + + $stmt = $pdo->prepare("SELECT COUNT(userid) FROM account"); + $stmt->execute(); + $count2 = $stmt->fetchColumn(); + + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); + +$result = $mysqli->query("SELECT userid FROM account ORDER BY datetime"); + +/* 結果セットの行数を取得します */ +$count1 = $result->num_rows; + +$result2 = $mysqli->query("SELECT uniqid FROM ueuse ORDER BY datetime"); + +/* 結果セットの行数を取得します */ +$count2 = $result2->num_rows; + +?> + + + + + + + + + + +<?php echo file_get_contents($servernamefile);?> + + + + + + + + + +
+ + +
+ + + + + +

へようこそ!

+
+
+ +

'; + }?>

+ + お問い合わせ : + + +

このサーバーには招待コードがないと登録できません。
招待コードはお手元にありますか?

+ + +
+
+
ユーザー数
+

"?>

+
+
+
投稿数
+

"?>

+
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/js/back.js b/js/back.js index 8778eb1..2cfab3f 100644 --- a/js/back.js +++ b/js/back.js @@ -1,6 +1,6 @@ - -window.onload = function(){ -var ele = document.getElementsByTagName("body")[0]; -var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合 -ele.style.backgroundImage = "url(img/titleimg/"+n+".png)"; -} + +window.onload = function(){ +var ele = document.getElementsByTagName("body")[0]; +var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合 +ele.style.backgroundImage = "url(img/titleimg/"+n+".png)"; +} diff --git a/login.php b/login.php index 99f46c1..7fe1959 100644 --- a/login.php +++ b/login.php @@ -65,7 +65,7 @@ if( !empty($_POST['btn_submit']) ) { $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - $result = $dbh->prepare("SELECT userid, password, loginid FROM account WHERE userid = :userid"); + $result = $dbh->prepare("SELECT userid, password, loginid, authcode FROM account WHERE userid = :userid"); $result->bindValue(':userid', $userid); // SQL実行 @@ -88,16 +88,25 @@ if( !empty($_POST['btn_submit']) ) { if($row["userid"] == $userid){ if(password_verify($password,$row["password"])){ - $_SESSION['admin_login'] = true; + if(empty($row["authcode"])){ + $_SESSION['admin_login'] = true; - $_SESSION['userid'] = $userid; - $_SESSION['loginid'] = $row["loginid"]; - // リダイレクト先のURLへ転送する - $url = 'check.php'; - header('Location: ' . $url, true, 303); + $_SESSION['userid'] = $userid; + $_SESSION['loginid'] = $row["loginid"]; + // リダイレクト先のURLへ転送する + $url = 'check.php'; + header('Location: ' . $url, true, 303); - // すべての出力を終了 - exit; + // すべての出力を終了 + exit; + }else{ + $_SESSION['userid'] = $userid; + $url = 'authlogin.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + } } else{ $error_message[] = 'IDまたはパスワードが違います'; @@ -159,14 +168,14 @@ $pdo = null;
- +
- +
@@ -174,6 +183,7 @@ $pdo = null;
戻る + パスワード復元
diff --git a/manifest/uwuzuicon.png b/manifest/uwuzuicon.png new file mode 100644 index 0000000..1b19c27 Binary files /dev/null and b/manifest/uwuzuicon.png differ diff --git a/new.php b/new.php index 382078e..3c6c92c 100644 --- a/new.php +++ b/new.php @@ -13,6 +13,9 @@ require('db.php'); $servernamefile = "server/servername.txt"; +$onlyuserfile = "server/onlyuser.txt"; +$onlyuser = file_get_contents($onlyuserfile); + session_start(); // 変数の初期化 @@ -97,6 +100,9 @@ if( !empty($_POST['btn_submit']) ) { $profile = $_POST['profile']; + if($onlyuser === "true"){ + $invitationcode = $_POST['invitationcode']; + } //cookieに保存 setcookie("username",$username,time()+60*60*24*14); @@ -143,6 +149,28 @@ if( !empty($_POST['btn_submit']) ) { $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + if($onlyuser === "true"){ + $query = $dbh->prepare('SELECT * FROM invitation WHERE code = :code limit 1'); + + $query->execute(array(':code' => $invitationcode)); + + $result = $query->fetch(); + + // 招待コードの入力チェック + if( empty($invitationcode) ) { + $error_message[] = '招待コードを入力してください。'; + } else { + if($result > 0){ + if($result["used"] === "true"){ + $error_message[] = 'この招待コード('.$invitationcode.')は既に使用されています。'; + } + }else{ + $error_message[] = 'この招待コード('.$invitationcode.')は使えません。'; + } + + } + } + $query = $dbh->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); @@ -333,6 +361,24 @@ if( !empty($_POST['btn_submit']) ) { // コミット $res = $pdo->commit(); + if($onlyuser === "true"){ + $pdo->beginTransaction(); + + $stmt = $pdo->prepare("UPDATE invitation SET used = :used, datetime = :datetime WHERE code = :code;"); + + $true = "true"; + $stmt->bindParam(':used', $true, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + $stmt->bindValue(':code', $invitationcode, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + } + } catch (Exception $e) { // エラーが発生した時はロールバック @@ -341,7 +387,8 @@ if( !empty($_POST['btn_submit']) ) { if ($res) { // リダイレクト先のURLへ転送する - $url = 'success.php'; + $_SESSION['userid'] = $userid; + $url = 'authcodechk'; header('Location: ' . $url, true, 303); // すべての出力を終了 @@ -448,9 +495,16 @@ $pdo = null;

登録を押すと利用規約とプライバシーポリシーに同意したこととなります。
未確認の場合は上のボタンよりお読みください。

- - - + +
+

招待コード

+
招待コードがないとこのサーバーには登録できません。
+ +
+ + + +
diff --git a/nextpage/nextpage.php b/nextpage/nextpage.php index 9270139..f4c856f 100644 --- a/nextpage/nextpage.php +++ b/nextpage/nextpage.php @@ -1,124 +1,112 @@ - 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(); -} - -$userid = $_GET['userid']; - -$itemsPerPage = 30; // 1ページあたりのユーズ数 -$pageNumber = isset($_GET['page']) ? intval($_GET['page']) : 1; -$offset = ($pageNumber - 1) * $itemsPerPage; - -$messages = array(); - -if (!empty($pdo)) { - - function customStripTags($html, $allowedTags) { - $allowedTagString = implode('|', $allowedTags); - $pattern = "/<(?!$allowedTagString)[^>]+>/"; - return preg_replace($pattern, '', $html); - } - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); - - // ユーズ内の絵文字を画像に置き換える - function replaceEmojisWithImages($postText) { - // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える - $pattern = '/:(\w+):/'; - $postTextWithImages = preg_replace_callback($pattern, function($matches) { - $emojiName = $matches[1]; - return "$emojiName"; - }, $postText); - return $postTextWithImages; - } - - function replaceURLsWithLinks($postText) { - // URLを正規表現を使って検出 - $pattern = '/(https?:\/\/[^\s]+)/'; - preg_match_all($pattern, $postText, $matches); - - // 検出したURLごとに処理を行う - foreach ($matches[0] as $url) { - // ドメイン部分を抽出 - $parsedUrl = parse_url($url); - $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; - - // ドメインのみを表示するaタグを生成 - $link = "$domain"; - - // URLをドメインのみを表示するaタグで置き換え - $postText = str_replace($url, $link, $postText); - } - - return $postText; - } - - - $sql = "SELECT account, username, uniqid, rpuniqid, ueuse, datetime, photo1, photo2, video1, favorite, abi, abidate FROM ueuse WHERE rpuniqid = '' ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"; - $message_array = $pdo->query($sql); - - while ($row = $message_array->fetch(PDO::FETCH_ASSOC)) { - - $messages[] = $row; - } - - // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える - foreach ($messages as &$message) { - $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $message["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if ($userData) { - $message['username'] = $userData['username']; - } - } - - // ユーズ内のHTMLコードに指定のタグを有効化する関数 - function replaceUnescapedHTMLTags($html) { - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); // 有効化するタグ - return customStripTags($html, $allowedTags); - } - - if(!empty($messages)){ - foreach ($messages as $value) { - - $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 - - // コンマで区切って配列に分割し、要素数を数える - $favIds = explode(',', $fav); - $value["favcnt"] = count($favIds)-1; - - $messageDisplay = new MessageDisplay($value, $userid); // $userid をコンストラクタに渡す - $messageDisplay->display(); - } - }else{ - echo '

ユーズがありません

'; - } - - $pdo = null; - -} - -?> + 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(); +} + +$userid = htmlentities($_GET['userid']); + +$itemsPerPage = 30; // 1ページあたりのユーズ数 +$pageNumber = htmlentities(isset($_GET['page'])) ? htmlentities(intval($_GET['page'])) : 1; +$offset = ($pageNumber - 1) * $itemsPerPage; + +$messages = array(); + +if (!empty($pdo)) { + + + // ユーズ内の絵文字を画像に置き換える + function replaceEmojisWithImages($postText) { + // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える + $pattern = '/:(\w+):/'; + $postTextWithImages = preg_replace_callback($pattern, function($matches) { + $emojiName = $matches[1]; + return "$emojiName"; + }, $postText); + return $postTextWithImages; + } + + function replaceURLsWithLinks($postText) { + // URLを正規表現を使って検出 + $pattern = '/(https?:\/\/[^\s]+)/'; + preg_match_all($pattern, $postText, $matches); + + // 検出したURLごとに処理を行う + foreach ($matches[0] as $url) { + // ドメイン部分を抽出 + $parsedUrl = parse_url($url); + $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; + + // ドメインのみを表示するaタグを生成 + $link = "$domain"; + + // URLをドメインのみを表示するaタグで置き換え + $postText = str_replace($url, $link, $postText); + } + + return $postText; + } + + + $sql = "SELECT account, username, uniqid, rpuniqid, ueuse, datetime, photo1, photo2, video1, favorite, abi, abidate FROM ueuse WHERE rpuniqid = '' ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"; + $message_array = $pdo->query($sql); + + while ($row = $message_array->fetch(PDO::FETCH_ASSOC)) { + + $messages[] = $row; + } + + // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える + foreach ($messages as &$message) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $message["account"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if ($userData) { + $message['username'] = $userData['username']; + } + } + + if(!empty($messages)){ + foreach ($messages as $value) { + + $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $favIds = explode(',', $fav); + $value["favcnt"] = count($favIds)-1; + + $messageDisplay = new MessageDisplay($value, $userid); // $userid をコンストラクタに渡す + $messageDisplay->display(); + } + }else{ + echo '

ユーズがありません

'; + } + + $pdo = null; + +} + +?> diff --git a/nextpage/notification.php b/nextpage/notification.php index c5b710e..7b36cfb 100644 --- a/nextpage/notification.php +++ b/nextpage/notification.php @@ -1,63 +1,63 @@ - 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(); -} - -$userid = $_GET['userid']; - -$itemsPerPage = 30; // 1ページあたりの投稿数 -$pageNumber = isset($_GET['page']) ? intval($_GET['page']) : 1; -$offset = ($pageNumber - 1) * $itemsPerPage; - -$messages = array(); - -if (!empty($pdo)) { - - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - - $messageQuery = $dbh->prepare("SELECT title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"); - $messageQuery->bindValue(':userid', $userid); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - if (!empty($message_array)) { - foreach ($message_array as $value) { - $messageDisplay = new MessageDisplay($value); // userid を渡さない - $messageDisplay->display(); - } - } else { - echo '

通知はありません

'; - } - - - $pdo = null; - -} - -?> + 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(); +} + +$userid = htmlentities($_GET['userid']); + +$itemsPerPage = 30; // 1ページあたりの投稿数 +$pageNumber = htmlentities(isset($_GET['page'])) ? htmlentities(intval($_GET['page'])) : 1; +$offset = ($pageNumber - 1) * $itemsPerPage; + +$messages = array(); + +if (!empty($pdo)) { + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $messageQuery = $dbh->prepare("SELECT title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"); + $messageQuery->bindValue(':userid', $userid); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + if (!empty($message_array)) { + foreach ($message_array as $value) { + $messageDisplay = new MessageDisplay($value); // userid を渡さない + $messageDisplay->display(); + } + } else { + echo '

通知はありません

'; + } + + + $pdo = null; + +} + +?> diff --git a/nextpage/notificationview.php b/nextpage/notificationview.php index 8a94294..4727d44 100644 --- a/nextpage/notificationview.php +++ b/nextpage/notificationview.php @@ -1,32 +1,32 @@ -value = $value; - } - - public function display() { - echo '
'; - echo '
'; - - echo '
'; - $day = date("Ymd", strtotime(htmlspecialchars($this->value['datetime']))); - if ($day == date("Ymd")) { - echo date("今日 H:i", strtotime(htmlspecialchars($this->value['datetime']))); - } else { - echo date("Y年m月d日 H:i", strtotime(htmlspecialchars($this->value['datetime']))); - } - echo '
'; - - echo '
'; - - // 投稿内のHTMLコードを表示する部分 - echo '

' . htmlspecialchars($this->value['title']) . '

'; - echo '

' . htmlspecialchars($this->value['msg']) . '

'; - echo ' 続きをみる'; - - echo '
'; - } -} -?> +value = $value; + } + + public function display() { + echo '
'; + echo '
'; + + echo '
'; + $day = date("Ymd", strtotime(htmlentities($this->value['datetime']))); + if ($day == date("Ymd")) { + echo date("今日 H:i", strtotime(htmlentities($this->value['datetime']))); + } else { + echo date("Y年m月d日 H:i", strtotime(htmlentities($this->value['datetime']))); + } + echo '
'; + + echo '
'; + + // 投稿内のHTMLコードを表示する部分 + echo '

' . htmlentities($this->value['title']) . '

'; + echo '

' . htmlentities($this->value['msg']) . '

'; + echo ' 続きをみる'; + + echo '
'; + } +} +?> diff --git a/nextpage/searchpage.php b/nextpage/searchpage.php index c14d434..e30193f 100644 --- a/nextpage/searchpage.php +++ b/nextpage/searchpage.php @@ -1,131 +1,118 @@ - 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(); -} - - -$keyword = isset($_GET['keyword']) ? $_GET['keyword'] : ''; -$userid = $_GET['userid']; - -$messages = array(); - -if (!empty($pdo)) { - - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - - $messageQuery = $dbh->prepare("SELECT account,username,ueuse,uniqid,rpuniqid,datetime,photo1,photo2,video1,favorite, abi, abidate FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC"); - $messageQuery->bindValue(':keyword', '%' . $keyword . '%', PDO::PARAM_STR); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - function customStripTags($html, $allowedTags) { - $allowedTagString = implode('|', $allowedTags); - $pattern = "/<(?!$allowedTagString)[^>]+>/"; - return preg_replace($pattern, '', $html); - } - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); - - // ユーズ内の絵文字を画像に置き換える - function replaceEmojisWithImages($postText) { - // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える - $pattern = '/:(\w+):/'; - $postTextWithImages = preg_replace_callback($pattern, function($matches) { - $emojiName = $matches[1]; - return "$emojiName"; - }, $postText); - return $postTextWithImages; - } - - function replaceURLsWithLinks($postText) { - // URLを正規表現を使って検出 - $pattern = '/(https?:\/\/[^\s]+)/'; - preg_match_all($pattern, $postText, $matches); - - // 検出したURLごとに処理を行う - foreach ($matches[0] as $url) { - // ドメイン部分を抽出 - $parsedUrl = parse_url($url); - $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; - - // ドメインのみを表示するaタグを生成 - $link = "$domain"; - - // URLをドメインのみを表示するaタグで置き換え - $postText = str_replace($url, $link, $postText); - } - - return $postText; - } - - - - - $messages = array(); - foreach ($message_array as $row) { - $messages[] = $row; - } - // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える - foreach ($messages as &$message) { - $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $message["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if ($userData) { - $message['username'] = $userData['username']; - } - } - - // ユーズ内のHTMLコードに指定のタグを有効化する関数 - function replaceUnescapedHTMLTags($html) { - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); // 有効化するタグ - return customStripTags($html, $allowedTags); - } - - if(!empty($messages)){ - foreach ($messages as $value) { - - $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 - - // コンマで区切って配列に分割し、要素数を数える - $favIds = explode(',', $fav); - $value["favcnt"] = count($favIds)-1; - - $messageDisplay = new MessageDisplay($value, $userid); - $messageDisplay->display(); - } - }else{ - echo '

ユーズがありません

'; - } - - $pdo = null; - -} - -?> + 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(); +} + + +$keyword = htmlentities(isset($_GET['keyword'])) ? htmlentities($_GET['keyword']) : ''; +$userid = htmlentities($_GET['userid']); + +$messages = array(); + +if (!empty($pdo)) { + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $messageQuery = $dbh->prepare("SELECT account,username,ueuse,uniqid,rpuniqid,datetime,photo1,photo2,video1,favorite, abi, abidate FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC"); + $messageQuery->bindValue(':keyword', '%' . $keyword . '%', PDO::PARAM_STR); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + // ユーズ内の絵文字を画像に置き換える + function replaceEmojisWithImages($postText) { + // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える + $pattern = '/:(\w+):/'; + $postTextWithImages = preg_replace_callback($pattern, function($matches) { + $emojiName = $matches[1]; + return "$emojiName"; + }, $postText); + return $postTextWithImages; + } + + function replaceURLsWithLinks($postText) { + // URLを正規表現を使って検出 + $pattern = '/(https?:\/\/[^\s]+)/'; + preg_match_all($pattern, $postText, $matches); + + // 検出したURLごとに処理を行う + foreach ($matches[0] as $url) { + // ドメイン部分を抽出 + $parsedUrl = parse_url($url); + $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; + + // ドメインのみを表示するaタグを生成 + $link = "$domain"; + + // URLをドメインのみを表示するaタグで置き換え + $postText = str_replace($url, $link, $postText); + } + + return $postText; + } + + + + + $messages = array(); + foreach ($message_array as $row) { + $messages[] = $row; + } + // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える + foreach ($messages as &$message) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $message["account"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if ($userData) { + $message['username'] = $userData['username']; + } + } + + if(!empty($messages)){ + foreach ($messages as $value) { + + $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $favIds = explode(',', $fav); + $value["favcnt"] = count($favIds)-1; + + $messageDisplay = new MessageDisplay($value, $userid); + $messageDisplay->display(); + } + }else{ + echo '

ユーズがありません

'; + } + + $pdo = null; + +} + +?> diff --git a/nextpage/ueusepage.php b/nextpage/ueusepage.php index 7de81e8..087304c 100644 --- a/nextpage/ueusepage.php +++ b/nextpage/ueusepage.php @@ -1,139 +1,125 @@ - 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(); -} - -$userid = $_GET['userid']; - -$ueuseid = isset($_GET['id']) ? $_GET['id'] : ''; - -$itemsPerPage = 30; // 1ページあたりの投稿数 -$pageNumber = isset($_GET['page']) ? intval($_GET['page']) : 1; -$offset = ($pageNumber - 1) * $itemsPerPage; - -$messages = array(); - -if (!empty($pdo)) { - - - // データベース接続の設定 - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - - - - function customStripTags($html, $allowedTags) { - $allowedTagString = implode('|', $allowedTags); - $pattern = "/<(?!$allowedTagString)[^>]+>/"; - return preg_replace($pattern, '', $html); - } - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); - // 投稿内の絵文字を画像に置き換える - function replaceEmojisWithImages($postText) { - // 投稿内で絵文字名(:emoji:)を検出して画像に置き換える - $pattern = '/:(\w+):/'; - $postTextWithImages = preg_replace_callback($pattern, function($matches) { - $emojiName = $matches[1]; - return "$emojiName"; - }, $postText); - return $postTextWithImages; - } - - function replaceURLsWithLinks($postText) { - // URLを正規表現を使って検出 - $pattern = '/(https?:\/\/[^\s]+)/'; - preg_match_all($pattern, $postText, $matches); - - // 検出したURLごとに処理を行う - foreach ($matches[0] as $url) { - // ドメイン部分を抽出 - $parsedUrl = parse_url($url); - $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; - - // ドメインのみを表示するaタグを生成 - $link = "$domain"; - - // URLをドメインのみを表示するaタグで置き換え - $postText = str_replace($url, $link, $postText); - } - - return $postText; - } - - // 投稿内容の取得(新しい順に取得) - $messageQuery = $dbh->prepare("SELECT account, username, ueuse, uniqid, rpuniqid, datetime, photo1, photo2, video1, favorite, abi, abidate FROM ueuse WHERE uniqid = :ueuseid OR rpuniqid = :rpueuseid ORDER BY datetime ASC LIMIT $offset, $itemsPerPage"); - $messageQuery->bindValue(':ueuseid', $ueuseid); - $messageQuery->bindValue(':rpueuseid', $ueuseid); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - $messages = array(); - - - - foreach ($message_array as $row) { - $messages[] = $row; - } - // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える - foreach ($messages as &$message) { - $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $message["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if ($userData) { - $message['username'] = $userData['username']; - } - } - - // 投稿内のHTMLコードに指定のタグを有効化する関数 - function replaceUnescapedHTMLTags($html) { - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); // 有効化するタグ - return customStripTags($html, $allowedTags); - } - - if(!empty($messages)){ - foreach ($messages as $value) { - $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 - - // コンマで区切って配列に分割し、要素数を数える - $favIds = explode(',', $fav); - $value["favcnt"] = count($favIds)-1; - - $messageDisplay = new MessageDisplay($value, $userid); - $messageDisplay->display(); - } - }else{ - echo '

投稿がありません

'; - } - - $pdo = null; - -} - -?> + 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(); +} + +$userid = htmlentities($_GET['userid']); + +$ueuseid = htmlentities(isset($_GET['id'])) ? htmlentities($_GET['id']) : ''; + +$itemsPerPage = 30; // 1ページあたりの投稿数 +$pageNumber = htmlentities(isset($_GET['page'])) ? htmlentities(intval($_GET['page'])) : 1; +$offset = ($pageNumber - 1) * $itemsPerPage; + +$messages = array(); + +if (!empty($pdo)) { + + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + // 投稿内の絵文字を画像に置き換える + function replaceEmojisWithImages($postText) { + // 投稿内で絵文字名(:emoji:)を検出して画像に置き換える + $pattern = '/:(\w+):/'; + $postTextWithImages = preg_replace_callback($pattern, function($matches) { + $emojiName = $matches[1]; + return "$emojiName"; + }, $postText); + return $postTextWithImages; + } + + function replaceURLsWithLinks($postText) { + // URLを正規表現を使って検出 + $pattern = '/(https?:\/\/[^\s]+)/'; + preg_match_all($pattern, $postText, $matches); + + // 検出したURLごとに処理を行う + foreach ($matches[0] as $url) { + // ドメイン部分を抽出 + $parsedUrl = parse_url($url); + $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; + + // ドメインのみを表示するaタグを生成 + $link = "$domain"; + + // URLをドメインのみを表示するaタグで置き換え + $postText = str_replace($url, $link, $postText); + } + + return $postText; + } + + // 投稿内容の取得(新しい順に取得) + $messageQuery = $dbh->prepare("SELECT account, username, ueuse, uniqid, rpuniqid, datetime, photo1, photo2, video1, favorite, abi, abidate FROM ueuse WHERE uniqid = :ueuseid OR rpuniqid = :rpueuseid ORDER BY datetime ASC LIMIT $offset, $itemsPerPage"); + $messageQuery->bindValue(':ueuseid', $ueuseid); + $messageQuery->bindValue(':rpueuseid', $ueuseid); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + $messages = array(); + + + + foreach ($message_array as $row) { + $messages[] = $row; + } + // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える + foreach ($messages as &$message) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $message["account"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if ($userData) { + $message['username'] = $userData['username']; + } + } + + if(!empty($messages)){ + foreach ($messages as $value) { + $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $favIds = explode(',', $fav); + $value["favcnt"] = count($favIds)-1; + + $messageDisplay = new MessageDisplay($value, $userid); + $messageDisplay->display(); + } + }else{ + echo '

投稿がありません

'; + } + + $pdo = null; + +} + +?> diff --git a/nextpage/userpage.php b/nextpage/userpage.php index 7e5699d..320b6a1 100644 --- a/nextpage/userpage.php +++ b/nextpage/userpage.php @@ -1,140 +1,125 @@ - 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(); -} - - -$uwuzuid = isset($_GET['id']) ? $_GET['id'] : ''; -$userid = $_GET['userid']; - -$itemsPerPage = 30; // 1ページあたりのユーズ数 -$pageNumber = isset($_GET['page']) ? intval($_GET['page']) : 1; -$offset = ($pageNumber - 1) * $itemsPerPage; - -$messages = array(); - -if (!empty($pdo)) { - - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - - $userQuery = $dbh->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $uwuzuid); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - $messageQuery = $dbh->prepare("SELECT account,username,ueuse,uniqid,rpuniqid,datetime,photo1,photo2,video1,favorite, abi, abidate FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"); - $messageQuery->bindValue(':userid', $uwuzuid); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - function customStripTags($html, $allowedTags) { - $allowedTagString = implode('|', $allowedTags); - $pattern = "/<(?!$allowedTagString)[^>]+>/"; - return preg_replace($pattern, '', $html); - } - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); - - // ユーズ内の絵文字を画像に置き換える - function replaceEmojisWithImages($postText) { - // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える - $pattern = '/:(\w+):/'; - $postTextWithImages = preg_replace_callback($pattern, function($matches) { - $emojiName = $matches[1]; - return "$emojiName"; - }, $postText); - return $postTextWithImages; - } - - function replaceURLsWithLinks($postText) { - // URLを正規表現を使って検出 - $pattern = '/(https?:\/\/[^\s]+)/'; - preg_match_all($pattern, $postText, $matches); - - // 検出したURLごとに処理を行う - foreach ($matches[0] as $url) { - // ドメイン部分を抽出 - $parsedUrl = parse_url($url); - $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; - - // ドメインのみを表示するaタグを生成 - $link = "$domain"; - - // URLをドメインのみを表示するaタグで置き換え - $postText = str_replace($url, $link, $postText); - } - - return $postText; - } - - - - - $messages = array(); - foreach ($message_array as $row) { - $messages[] = $row; - } - // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える - foreach ($messages as &$message) { - $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $message["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if ($userData) { - $message['username'] = $userData['username']; - } - } - - // ユーズ内のHTMLコードに指定のタグを有効化する関数 - function replaceUnescapedHTMLTags($html) { - $allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); // 有効化するタグ - return customStripTags($html, $allowedTags); - } - - if(!empty($messages)){ - foreach ($messages as $value) { - - $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 - - // コンマで区切って配列に分割し、要素数を数える - $favIds = explode(',', $fav); - $value["favcnt"] = count($favIds)-1; - - $messageDisplay = new MessageDisplay($value, $userid); - $messageDisplay->display(); - } - }else{ - echo '

ユーズがありません

'; - } - - $pdo = null; - -} - -?> + 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(); +} + + +$uwuzuid = htmlentities(isset($_GET['id'])) ? htmlentities($_GET['id']) : ''; +$userid = htmlentities($_GET['userid']); + +$itemsPerPage = 30; // 1ページあたりのユーズ数 +$pageNumber = htmlentities(isset($_GET['page'])) ? htmlentities(intval($_GET['page'])) : 1; +$offset = ($pageNumber - 1) * $itemsPerPage; + +$messages = array(); + +if (!empty($pdo)) { + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $userQuery = $dbh->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $uwuzuid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + $messageQuery = $dbh->prepare("SELECT account,username,ueuse,uniqid,rpuniqid,datetime,photo1,photo2,video1,favorite, abi, abidate FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"); + $messageQuery->bindValue(':userid', $uwuzuid); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + // ユーズ内の絵文字を画像に置き換える + function replaceEmojisWithImages($postText) { + // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える + $pattern = '/:(\w+):/'; + $postTextWithImages = preg_replace_callback($pattern, function($matches) { + $emojiName = $matches[1]; + return "$emojiName"; + }, $postText); + return $postTextWithImages; + } + + function replaceURLsWithLinks($postText) { + // URLを正規表現を使って検出 + $pattern = '/(https?:\/\/[^\s]+)/'; + preg_match_all($pattern, $postText, $matches); + + // 検出したURLごとに処理を行う + foreach ($matches[0] as $url) { + // ドメイン部分を抽出 + $parsedUrl = parse_url($url); + $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; + + // ドメインのみを表示するaタグを生成 + $link = "$domain"; + + // URLをドメインのみを表示するaタグで置き換え + $postText = str_replace($url, $link, $postText); + } + + return $postText; + } + + + $messages = array(); + foreach ($message_array as $row) { + $messages[] = $row; + } + // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える + foreach ($messages as &$message) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $message["account"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if ($userData) { + $message['username'] = $userData['username']; + } + } + + if(!empty($messages)){ + foreach ($messages as $value) { + + $fav = $value['favorite']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $favIds = explode(',', $fav); + $value["favcnt"] = count($favIds)-1; + + $messageDisplay = new MessageDisplay($value, $userid); + $messageDisplay->display(); + } + }else{ + echo '

ユーズがありません

'; + } + + $pdo = null; + +} + +?> diff --git a/nextpage/view.php b/nextpage/view.php index 7bef23d..cfbb58c 100644 --- a/nextpage/view.php +++ b/nextpage/view.php @@ -1,85 +1,85 @@ - -value = $value; - $this->userid = $userid; - } - - public function display() { - if (empty($this->value)) { - echo '

ユーズがありません

'; - } else { - echo '
'; - if(!empty($this->value['rpuniqid'])){ - echo '

┗━ 一番上のユーズに返信

'; - } - echo '
'; - - echo ' '; - echo ' ' . htmlspecialchars($this->value['username']) . ''; - echo ' '; - echo '
'; - $day = date("Ymd", strtotime(htmlspecialchars($this->value['datetime']))); - if ($day == date("Ymd")) { - echo date("今日 H:i", strtotime(htmlspecialchars($this->value['datetime']))); - } else { - echo date("Y年m月d日 H:i", strtotime(htmlspecialchars($this->value['datetime']))); - } - echo '
'; - - echo '
'; - - echo '

' . replaceEmojisWithImages(replaceURLsWithLinks(nl2br(replaceUnescapedHTMLTags($this->value['ueuse'])))) . '

'; - - if (!empty($this->value['photo2']) && $this->value['photo2'] !== 'none') { - echo '
'; - echo ' 画像'; - echo ' 画像'; - echo '
'; - } elseif (!empty($this->value['photo1']) && $this->value['photo1'] !== 'none') { - echo '
'; - echo ' 画像'; - echo '
'; - } - if (!empty($this->value['video1']) && $this->value['video1'] !== 'none') { - echo '
'; - echo ' '; - echo '
'; - } - - if(!($this->value['abi'] == "none")){ - echo '
'; - echo '
'; - echo '

' . htmlspecialchars($this->value['username']) . 'さんが追記しました

'; - echo '
'; - echo '

'. htmlspecialchars($this->value['abi']) . '

'; - echo '

追記日時 : '. date("Y年m月d日 H:i", strtotime(htmlspecialchars($this->value['abidate']))) . '

'; - echo '
'; - } - - echo '
'; - echo '
'; - if (false !== strstr($this->value['favorite'], $this->userid)) { - echo ''; - }else{ - echo ''; - } - echo '返信をみる&する'; - if($this->value['account'] === $this->userid){ - if($this->value['abi'] === "none"){ - echo ''; - } - echo ''; - } - echo '
'; - echo '
'; - } - } -} + +value = $value; + $this->userid = $userid; + } + + public function display() { + if (empty($this->value)) { + echo '

ユーズがありません

'; + } else { + echo '
'; + if(!empty($this->value['rpuniqid'])){ + echo '

┗━ 一番上のユーズに返信

'; + } + echo '
'; + + echo ' '; + echo ' ' . htmlentities($this->value['username']) . ''; + echo ' '; + echo '
'; + $day = date("Ymd", strtotime(htmlentities($this->value['datetime']))); + if ($day == date("Ymd")) { + echo date("今日 H:i", strtotime(htmlentities($this->value['datetime']))); + } else { + echo date("Y年m月d日 H:i", strtotime(htmlentities($this->value['datetime']))); + } + echo '
'; + + echo '
'; + + echo '

' . replaceEmojisWithImages(replaceURLsWithLinks(nl2br($this->value['ueuse']))) . '

'; + + if (!empty($this->value['photo2']) && $this->value['photo2'] !== 'none') { + echo '
'; + echo ' 画像'; + echo ' 画像'; + echo '
'; + } elseif (!empty($this->value['photo1']) && $this->value['photo1'] !== 'none') { + echo '
'; + echo ' 画像'; + echo '
'; + } + if (!empty($this->value['video1']) && $this->value['video1'] !== 'none') { + echo '
'; + echo ' '; + echo '
'; + } + + if(!($this->value['abi'] == "none")){ + echo '
'; + echo '
'; + echo '

' . htmlentities($this->value['username']) . 'さんが追記しました

'; + echo '
'; + echo '

'.replaceEmojisWithImages(replaceURLsWithLinks(nl2br($this->value['abi']))) . '

'; + echo '

追記日時 : '. date("Y年m月d日 H:i", strtotime(htmlentities($this->value['abidate']))) . '

'; + echo '
'; + } + + echo '
'; + echo '
'; + if (false !== strstr($this->value['favorite'], $this->userid)) { + echo ''; + }else{ + echo ''; + } + echo '返信をみる&する'; + if($this->value['account'] === $this->userid){ + if($this->value['abi'] === "none"){ + echo ''; + } + echo ''; + } + echo '
'; + echo '
'; + } + } +} ?> \ No newline at end of file diff --git a/notice/addnotice.php b/notice/addnotice.php index d1c2018..8bff8b1 100644 --- a/notice/addnotice.php +++ b/notice/addnotice.php @@ -25,8 +25,8 @@ $option = null; session_start(); -$userid = $_SESSION['userid']; -$username = $_SESSION['username']; +$userid = htmlentities($_SESSION['userid']); +$username = htmlentities($_SESSION['username']); try { diff --git a/notice/notice.php b/notice/notice.php index c2e8e41..f3b6dca 100644 --- a/notice/notice.php +++ b/notice/notice.php @@ -1,40 +1,40 @@ - 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(); -} - -$sql = "SELECT title, note, account, datetime FROM notice ORDER BY datetime DESC"; -$notice_array = $pdo->query($sql); - -while ($row = $notice_array->fetch(PDO::FETCH_ASSOC)) { - - $notices[] = $row; -} - -if(!empty($notices)){ - foreach ($notices as $value) { - $uneinoticenote = $value['note']; - $uneinoticetitle = $value['title']; - $uneinoticeaccount = $value['account']; - $uneinoticedatetime = $value['datetime']; - } -}else{ - $uneinoticenote = ""; - $uneinoticetitle = "おしらせはありません"; - $uneinoticeaccount = "uwuzu"; - $uneinoticedatetime = ""; -} - + 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(); +} + +$sql = "SELECT title, note, account, datetime FROM notice ORDER BY datetime DESC"; +$notice_array = $pdo->query($sql); + +while ($row = $notice_array->fetch(PDO::FETCH_ASSOC)) { + + $notices[] = $row; +} + +if(!empty($notices)){ + foreach ($notices as $value) { + $uneinoticenote = htmlentities($value['note']); + $uneinoticetitle = htmlentities($value['title']); + $uneinoticeaccount = htmlentities($value['account']); + $uneinoticedatetime = htmlentities($value['datetime']); + } +}else{ + $uneinoticenote = ""; + $uneinoticetitle = "おしらせはありません"; + $uneinoticeaccount = "uwuzu"; + $uneinoticedatetime = ""; +} + diff --git a/notification/index.php b/notification/index.php index 75972ce..91195bd 100644 --- a/notification/index.php +++ b/notification/index.php @@ -1,229 +1,229 @@ - PDO::ERRMODE_EXCEPTION, - PDO::MYSQL_ATTR_MULTI_STATEMENTS => false - ); - $pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - -} catch(PDOException $e) { - - // 接続エラーのときエラー内容を取得する - $error_message[] = $e->getMessage(); -} - -if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { - - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); - $passQuery->bindValue(':userid', $_SESSION['userid']); - $passQuery->execute(); - $res = $passQuery->fetch(); - if(empty($res["userid"])){ - header("Location: ../login.php"); - exit; - }elseif($_SESSION['loginid'] === $res["loginid"]){ - // セッションに値をセット - $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット - $username = $_SESSION['username']; // セッションに格納されている値をそのままセット - $_SESSION['admin_login'] = true; - $_SESSION['userid'] = $userid; - $_SESSION['username'] = $username; - $_SESSION['loginid'] = $res["loginid"]; - setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); - setcookie('username', $username, time() + 60 * 60 * 24 * 14); - setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); - setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); - }else{ - header("Location: ../login.php"); - exit; - } - - -} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { - - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); - $passQuery->bindValue(':userid', $_COOKIE['userid']); - $passQuery->execute(); - $res = $passQuery->fetch(); - if(empty($res["userid"])){ - header("Location: ../login.php"); - exit; - }elseif($_COOKIE['loginid'] === $res["loginid"]){ - // セッションに値をセット - $userid = $_COOKIE['userid']; // クッキーから取得した値をセット - $username = $_COOKIE['username']; // クッキーから取得した値をセット - $_SESSION['admin_login'] = true; - $_SESSION['userid'] = $userid; - $_SESSION['username'] = $username; - $_SESSION['loginid'] = $res["loginid"]; - setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); - setcookie('username', $username, time() + 60 * 60 * 24 * 14); - setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); - setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); - }else{ - header("Location: ../login.php"); - exit; - } - - -} else { - // ログインが許可されていない場合、ログインページにリダイレクト - header("Location: ../login.php"); - exit; -} -if(empty($userid)){ - header("Location: ../login.php"); - exit; -} -if(empty($username)){ - header("Location: ../login.php"); - exit; -} - -if( !empty($_POST['logout']) ) { - if (isset($_SERVER['HTTP_COOKIE'])) { - $cookies = explode(';', $_SERVER['HTTP_COOKIE']); - foreach($cookies as $cookie) { - $parts = explode('=', $cookie); - $name = trim($parts[0]); - setcookie($name, '', time()-1000); - setcookie($name, '', time()-1000, '/'); - } - } - // リダイレクト先のURLへ転送する - $url = '../index.php'; - header('Location: ' . $url, true, 303); - - // すべての出力を終了 - exit; -} - - - -// データベースの接続を閉じる -$pdo = null; - -?> - - - - - - - - -通知 - <?php echo file_get_contents($servernamefile);?> - - - - - -
- - - - - -
-
- -
-
- - - -
- - - - - - - - - - - + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if( !empty($_POST['logout']) ) { + if (isset($_SERVER['HTTP_COOKIE'])) { + $cookies = explode(';', $_SERVER['HTTP_COOKIE']); + foreach($cookies as $cookie) { + $parts = explode('=', $cookie); + $name = trim($parts[0]); + setcookie($name, '', time()-1000); + setcookie($name, '', time()-1000, '/'); + } + } + // リダイレクト先のURLへ転送する + $url = '../index.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; +} + + + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +通知 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/others/index.php b/others/index.php index 9bfd40e..61f3ad4 100644 --- a/others/index.php +++ b/others/index.php @@ -25,8 +25,8 @@ $option = null; session_start(); -$userid = $_SESSION['userid']; -$username = $_SESSION['username']; +$userid = htmlentities($_SESSION['userid']); +$username = htmlentities($_SESSION['username']); // 管理者としてログインしているか確認 if( empty($_SESSION['admin_login']) || $_SESSION['admin_login'] !== true ) { @@ -136,7 +136,7 @@ if( !empty($pdo) ) { if( !empty($_POST['btn_submit']) ) { - $chkuserid = $_POST['chkuserid']; + $chkuserid = htmlentities($_POST['chkuserid']); if( empty($chkuserid) ) { $error_message[] = '確認用ユーザーIDを入力してください。'; @@ -233,6 +233,51 @@ if( !empty($_POST['btn_submit']) ) { } +if( !empty($_POST['session_submit']) ) { + $loginid = sha1(uniqid(mt_rand(), true)); + $pdo->beginTransaction(); + try { + + $stmt = $pdo->prepare("UPDATE account SET loginid = :loginid WHERE userid = :userid;"); + + $stmt->bindParam(':loginid', $loginid, PDO::PARAM_STR); + + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + if (isset($_SERVER['HTTP_COOKIE'])) { + $cookies = explode(';', $_SERVER['HTTP_COOKIE']); + foreach($cookies as $cookie) { + $parts = explode('=', $cookie); + $name = trim($parts[0]); + setcookie($name, '', time()-1000); + setcookie($name, '', time()-1000, '/'); + } + } + // リダイレクト先のURLへ転送する + $url = '../index.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + } else { + $error_message[] = '登録に失敗しました。'; + } + +} + + if( !empty($_POST['logout']) ) { if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); @@ -259,7 +304,9 @@ if( !empty($_POST['logout']) ) { -アカウント削除ページ - <?php echo file_get_contents($servernamefile);?> + + +その他の項目 - <?php echo file_get_contents($servernamefile);?> @@ -275,7 +322,11 @@ if( !empty($_POST['logout']) ) {
-

アカウント削除ページ

+

セッション終了

+

下のセッションを終了ボタンを押すと全てのログイン中のデバイスからログアウトされます。
再度uwuzu使用するにはログインが必須になります。

+ +
+

アカウント削除

アカウント誤削除を防ぐため下の入力ボックスにご自身のユーザーIDを入力する必要があります。

diff --git a/passrecovery/back.js b/passrecovery/back.js new file mode 100644 index 0000000..ccde4e1 --- /dev/null +++ b/passrecovery/back.js @@ -0,0 +1,6 @@ + +window.onload = function(){ +var ele = document.getElementsByTagName("body")[0]; +var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合 +ele.style.backgroundImage = "url(../img/titleimg/"+n+".png)"; +} diff --git a/passrecovery/badrecovery.php b/passrecovery/badrecovery.php new file mode 100644 index 0000000..1209c1f --- /dev/null +++ b/passrecovery/badrecovery.php @@ -0,0 +1,40 @@ + + + + + + + + + + + +残念なお知らせ - <?php echo file_get_contents($servernamefile);?> + + + + + + + +
+ + +
+

パスワード変更不可

+ +

申し訳ございませんがお使いのアカウントのパスワードは変更できません。

+ +
+ もどる +
+
+
+ + + + \ No newline at end of file diff --git a/passrecovery/donerecovery.php b/passrecovery/donerecovery.php new file mode 100644 index 0000000..192c658 --- /dev/null +++ b/passrecovery/donerecovery.php @@ -0,0 +1,40 @@ + + + + + + + + + + + +パスワード変更完了 - <?php echo file_get_contents($servernamefile);?> + + + + + + + +
+ + +
+

パスワードの変更が完了しました!

+ +

パスワードの変更が完了しました。下のボタンよりログインしてください!

+ + +
+
+ + + + \ No newline at end of file diff --git a/passrecovery/index.php b/passrecovery/index.php new file mode 100644 index 0000000..7c048d7 --- /dev/null +++ b/passrecovery/index.php @@ -0,0 +1,204 @@ + 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(); +} + +if( !empty($_POST['btn_submit']) ) { + + + //$row['userid'] = "daichimarukn"; + + $userid = $_POST['userid']; + $mailadds = $_POST['mailadds']; + + + $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, mailadds, loginid, authcode FROM account WHERE userid = :userid"); + + $result->bindValue(':userid', $userid); + // SQL実行 + $result->execute(); + + + + // ... (前略) + // IDの入力チェック + if( empty($userid) ) { + $error_message[] = 'ユーザーIDを入力してください。'; + } else { + + if( empty($mailadds) ) { + $error_message[] = 'メールアドレスを入力してください。'; + } else { + + if($result->rowCount() > 0) { + $row = $result->fetch(); // ここでデータベースから取得した値を $row に代入する + + if($row["userid"] == $userid){ + if($row["mailadds"] == $mailadds){ + if(empty($row["authcode"])){ + + $_SESSION['userid'] = ""; + $url = 'badrecovery.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + }else{ + $_SESSION['userid'] = $userid; + $url = 'startrecovery.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + } + } + else{ + $error_message[] = 'IDまたはメールアドレスが違います'; + } + }else{ + $error_message[] = 'IDまたはメールアドレスが違います'; + } + } + else { + $error_message[] = 'IDまたはメールアドレスが違います'; + } + } + + } + + // ... (後略) + + + +} + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +パスワードの復元 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
+

パスワードの復元

+ +

IDと登録したメールアドレスを入力してください。

+ + +
    + +

    + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + +
+ 戻る +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/passrecovery/startrecovery.php b/passrecovery/startrecovery.php new file mode 100644 index 0000000..0be93ee --- /dev/null +++ b/passrecovery/startrecovery.php @@ -0,0 +1,298 @@ + 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, $options); +} catch(PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = 'データベース接続エラー: ' . $e->getMessage(); +} + + +if( !empty($_POST['btn_submit']) ) { + + $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, $options); + + require_once '../authcode/GoogleAuthenticator.php'; + + $result = $dbh->prepare("SELECT authcode,loginid,username FROM account WHERE userid = :userid"); + + $result->bindValue(':userid', $userid); + // SQL実行 + $result->execute(); + if($result->rowCount() > 0) { + $row = $result->fetch(); + + $tousercode = $row["authcode"]; + + $chkauthcode = new PHPGangsta_GoogleAuthenticator(); + + $userauthcode = $_POST['usercode']; + $password = $_POST['password']; + + if(empty($userauthcode)){ + $error_message[] = "コードを入力してください。"; + }else{ + + $discrepancy = 2; + + $checkResult = $chkauthcode->verifyCode($tousercode, $userauthcode, $discrepancy); + if ($checkResult) { + + // パスワードの入力チェック + if( empty($password) ) { + $error_message[] = 'パスワードを入力してください。'; + } else { + + $weakPasswords = array( + "password", + "123456", + "123456789", + "12345", + "12345678", + "123123", + "1234567890", + "1234567", + "1q2w3e", + "qwerty123", + "aa12345678", + "password1", + "1234", + "qwertyuiop", + "123321", + "12321", + "qwertyui", + "abcd1234", + "zaq12wsx", + "1q2w3e4r", + "qwer1234", + "sakura", + "asdf1234", + "asdfghjkl", + "asdfghjk", + "member", + "1qaz2wsx", + "doraemon", + "makoto", + "takeshi", + "machi1", + "machida", + "machida1", + "tokyo", + "arashi", + "dropbox", + "twitter", + "elonmusk", + "xcorp", + "1234qwer", + "japan", + "nippon", + "tukareta", + "tweet", + "discord", + "misskey", + "qwerty", + "123456789", + "abc123", + "password123", + "admin", + "letmein", + "iloveyou", + "111111", + "12345678910", + "user", + "root", + "system", + // 他にも弱いパスワードを追加できます + ); + + function isWeakPassword($passwords) { + global $weakPasswords; + return in_array($passwords, $weakPasswords); + } + + // テスト用のパスワード(実際にはユーザー入力などから取得することになります。 + + if (isWeakPassword($password)) { + $error_message[] = "パスワードが弱いです。セキュリティ上変更してください。"; + } else { + + } + + if( 4 > mb_strlen($password, 'UTF-8') ) { + $error_message[] = 'パスワードは4文字以上である必要があります。'; + } + + // 文字数を確認 + if( 100 < mb_strlen($password, 'UTF-8') ) { + $error_message[] = 'パスワードは100文字以内で入力してください。'; + } + } + + if( empty($error_message) ) { + // トランザクション開始 + $pdo->beginTransaction(); + $hashpassword = password_hash($password, PASSWORD_DEFAULT); + + try { + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET password = :password WHERE userid = :userid;"); + + // 他の値をセット + $stmt->bindParam(':password', $hashpassword, PDO::PARAM_STR); + + // 条件を指定 + // 以下の部分を適切な条件に置き換えてください + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + $_SESSION['userid'] = ""; + $url = 'donerecovery.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + } else { + $error_message[] = 'パスワードの更新に失敗しました。'; + } + } + + }else { + $error_message[] = '二段階認証が出来ませんでした。再度お試しください。'; + } + + // プリペアドステートメントを削除 + $stmt = null; + } + } +} + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +ログイン - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
+

二段階認証

+ +

二段階認証コードと新しいパスワードを入力してください。

+ + + + + +
+
+

二段階認証コード

+
6桁のコードを入力してください。
+ +
+
+

新しいパスワード

+
新しいパスワードを入力してください。
+ +
+ +
+ +
+ 戻る +
+
+
+ + + + + + + \ No newline at end of file diff --git a/require/botbox.php b/require/botbox.php index 7d002cf..b5617a6 100644 --- a/require/botbox.php +++ b/require/botbox.php @@ -1,10 +1,10 @@ - -
-
- ホーム - 検索 - 自情報 - 設定 -
-
+ +
+
+ ホーム + 検索 + 自情報 + 設定 +
+
\ No newline at end of file diff --git a/require/leftbox.php b/require/leftbox.php index b4b1305..e350811 100644 --- a/require/leftbox.php +++ b/require/leftbox.php @@ -1,26 +1,26 @@ - -
- -
-
- 🏠ホーム - 検索 - 通知 - 絵文字 - プロフィール - 設定 - その他 - -
- 絵文字登録 - お知らせ配信 -
- -
- -
-
-
+ +
+ +
+
+ 🏠ホーム + 検索 + 通知 + 絵文字 + プロフィール + 設定 + その他 + +
+ 絵文字登録 + お知らせ配信 +
+ +
+ +
+
+
\ No newline at end of file diff --git a/require/rightbox.php b/require/rightbox.php index 79cf849..e846a79 100644 --- a/require/rightbox.php +++ b/require/rightbox.php @@ -1,45 +1,45 @@ -
- -

お知らせ

-
- -
-

-

-

編集者 :

-

-
- -
-

サーバー情報

-
-

Server

-

-

- 利用規約プライバシーポリシー -

Software

-

-

Version :

-

Developer :

- もっと詳しく!リリースノート -
+
+ +

お知らせ

+
+ +
+

+

+

編集者 :

+

+
+ +
+

サーバー情報

+
+

Server

+

+

+ 利用規約プライバシーポリシー +

Software

+

+

Version :

+

Developer :

+ もっと詳しく!リリースノート +
\ No newline at end of file diff --git a/rule/privacypolicy.php b/rule/privacypolicy.php index 90cfff6..f1b9214 100644 --- a/rule/privacypolicy.php +++ b/rule/privacypolicy.php @@ -1,80 +1,80 @@ - - -

$1

', $markdownText); - - // 画像(#img)をHTMLのimgタグに変換 - $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); - - // タイトル(#、##、###)をHTMLのhタグに変換 - $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); - - // 箇条書き(-)をHTMLのul/liタグに変換 - $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); - - // 空行の前に何もない行をHTMLのpタグに変換 - $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); - - return $markdownText; -} - -$sprivacypolicy = explode("\n", $privacypolicydata); -$htmltext = ''; // 初期化 - -foreach ($sprivacypolicy as $privacypolicy) { - $markdowntext = $privacypolicy; - $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); - $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 -} - - -?> - - - - - - -プライバシーポリシー - <?php echo file_get_contents($servernamefile);?> - - - - -
- -
- -
- -

プライバシーポリシー

-
-
- -

- -
- - - - + + +

$1

', $markdownText); + + // 画像(#img)をHTMLのimgタグに変換 + $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); + + // タイトル(#、##、###)をHTMLのhタグに変換 + $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); + + // 箇条書き(-)をHTMLのul/liタグに変換 + $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); + + // 空行の前に何もない行をHTMLのpタグに変換 + $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); + + return $markdownText; +} + +$sprivacypolicy = explode("\n", $privacypolicydata); +$htmltext = ''; // 初期化 + +foreach ($sprivacypolicy as $privacypolicy) { + $markdowntext = $privacypolicy; + $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); + $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 +} + + +?> + + + + + + +プライバシーポリシー - <?php echo file_get_contents($servernamefile);?> + + + + +
+ +
+ +
+ +

プライバシーポリシー

+
+
+ +

+ +
+ + + + \ No newline at end of file diff --git a/rule/releasenotes.php b/rule/releasenotes.php index 5852a3b..54f0a02 100644 --- a/rule/releasenotes.php +++ b/rule/releasenotes.php @@ -1,93 +1,93 @@ - - -

$1

', $markdownText); - - // 画像(#img)をHTMLのimgタグに変換 - $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); - - // タイトル(#、##、###)をHTMLのhタグに変換 - $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); - - // 箇条書き(-)をHTMLのul/liタグに変換 - $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); - - // 空行の前に何もない行をHTMLのpタグに変換 - $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); - - return $markdownText; -} - -$srelease = explode("\n", $releasedata); -$htmltext = ''; // 初期化 - -foreach ($srelease as $release) { - $markdowntext = $release; - $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); - $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 -} - - -?> - - - - - - -<?php echo $uwuzuinfo[0]?> リリースノート - <?php echo file_get_contents($servernamefile);?> - - - - - -
- -
- -
- -

リリースノート

-
-
-
-
Version :
Developer :
Last Update :
- - -

- -
- - - - + + +

$1

', $markdownText); + + // 画像(#img)をHTMLのimgタグに変換 + $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); + + // タイトル(#、##、###)をHTMLのhタグに変換 + $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); + + // 箇条書き(-)をHTMLのul/liタグに変換 + $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); + + // 空行の前に何もない行をHTMLのpタグに変換 + $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); + + return $markdownText; +} + +$srelease = explode("\n", $releasedata); +$htmltext = ''; // 初期化 + +foreach ($srelease as $release) { + $markdowntext = $release; + $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); + $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 +} + + +?> + + + + + + +<?php echo $uwuzuinfo[0]?> リリースノート - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ +
+ +
+ +

リリースノート

+
+
+
+
Version :
Developer :
Last Update :
+ + +

+ +
+ + + + \ No newline at end of file diff --git a/rule/terms.php b/rule/terms.php index 706af81..5f09619 100644 --- a/rule/terms.php +++ b/rule/terms.php @@ -1,80 +1,80 @@ - - -

$1

', $markdownText); - - // 画像(#img)をHTMLのimgタグに変換 - $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); - - // タイトル(#、##、###)をHTMLのhタグに変換 - $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); - - // 箇条書き(-)をHTMLのul/liタグに変換 - $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); - - // 空行の前に何もない行をHTMLのpタグに変換 - $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); - - return $markdownText; -} - -$sterms = explode("\n", $termsdata); -$htmltext = ''; // 初期化 - -foreach ($sterms as $terms) { - $markdowntext = $terms; - $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); - $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 -} - - -?> - - - - - - -利用規約 - <?php echo file_get_contents($servernamefile);?> - - - - -
- -
- -
- -

利用規約

-
-
- -

- -
- - - - + + +

$1

', $markdownText); + + // 画像(#img)をHTMLのimgタグに変換 + $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); + + // タイトル(#、##、###)をHTMLのhタグに変換 + $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); + + // 箇条書き(-)をHTMLのul/liタグに変換 + $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); + + // 空行の前に何もない行をHTMLのpタグに変換 + $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); + + return $markdownText; +} + +$sterms = explode("\n", $termsdata); +$htmltext = ''; // 初期化 + +foreach ($sterms as $terms) { + $markdowntext = $terms; + $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); + $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 +} + + +?> + + + + + + +利用規約 - <?php echo file_get_contents($servernamefile);?> + + + + +
+ +
+ +
+ +

利用規約

+
+
+ +

+ +
+ + + + \ No newline at end of file diff --git a/rule/uwuzuabout.php b/rule/uwuzuabout.php index 023004b..2694f3a 100644 --- a/rule/uwuzuabout.php +++ b/rule/uwuzuabout.php @@ -1,93 +1,93 @@ - - -

$1

', $markdownText); - - // 画像(#img)をHTMLのimgタグに変換 - $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); - - // タイトル(#、##、###)をHTMLのhタグに変換 - $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); - $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); - - // 箇条書き(-)をHTMLのul/liタグに変換 - $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); - - // 空行の前に何もない行をHTMLのpタグに変換 - $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); - - return $markdownText; -} - -$sterms = explode("\n", $termsdata); -$htmltext = ''; // 初期化 - -foreach ($sterms as $terms) { - $markdowntext = $terms; - $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); - $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 -} - - -?> - - - - - - -<?php echo $uwuzuinfo[0]?>について - <?php echo file_get_contents($servernamefile);?> - - - - - -
- -
- -
- -

について

-
-
-
-
Version :
Developer :
Last Update :
- - -

- -
- - - - + + +

$1

', $markdownText); + + // 画像(#img)をHTMLのimgタグに変換 + $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); + + // タイトル(#、##、###)をHTMLのhタグに変換 + $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); + $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); + + // 箇条書き(-)をHTMLのul/liタグに変換 + $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); + + // 空行の前に何もない行をHTMLのpタグに変換 + $markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1

$2

', $markdownText); + + return $markdownText; +} + +$sterms = explode("\n", $termsdata); +$htmltext = ''; // 初期化 + +foreach ($sterms as $terms) { + $markdowntext = $terms; + $convertedText = processMarkdownAndWrapEmptyLines($markdowntext); + $htmltext .= $convertedText . "\n"; // 変換されたテキストを追加 +} + + +?> + + + + + + +<?php echo $uwuzuinfo[0]?>について - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ +
+ +
+ +

について

+
+
+
+
Version :
Developer :
Last Update :
+ + +

+ +
+ + + + \ No newline at end of file diff --git a/search/index.php b/search/index.php index abe3d84..db917bf 100644 --- a/search/index.php +++ b/search/index.php @@ -200,7 +200,7 @@ $pdo = null;

ユーズに追記しますか?

※追記は削除出来ません。

- +
diff --git a/server/admininfo.txt b/server/admininfo.txt new file mode 100644 index 0000000..62573b3 --- /dev/null +++ b/server/admininfo.txt @@ -0,0 +1 @@ +TEST/@test \ No newline at end of file diff --git a/server/contact.txt b/server/contact.txt new file mode 100644 index 0000000..beef183 --- /dev/null +++ b/server/contact.txt @@ -0,0 +1 @@ +test@test.com \ No newline at end of file diff --git a/server/info.txt b/server/info.txt new file mode 100644 index 0000000..a4a3c6c --- /dev/null +++ b/server/info.txt @@ -0,0 +1,3 @@ +XXXXへようこそ! +XXXXはuwuzu~~~~~~~~~ +とりあえず適当に書いてみよう! \ No newline at end of file diff --git a/server/onlyuser.txt b/server/onlyuser.txt new file mode 100644 index 0000000..02e4a84 --- /dev/null +++ b/server/onlyuser.txt @@ -0,0 +1 @@ +false \ No newline at end of file diff --git a/server/privacypolicy.txt b/server/privacypolicy.txt new file mode 100644 index 0000000..9e1c9b5 --- /dev/null +++ b/server/privacypolicy.txt @@ -0,0 +1 @@ +ここもしっかり書こう \ No newline at end of file diff --git a/server/servername.txt b/server/servername.txt new file mode 100644 index 0000000..650af7e --- /dev/null +++ b/server/servername.txt @@ -0,0 +1 @@ +tesutoさば \ No newline at end of file diff --git a/server/serverstop.txt b/server/serverstop.txt new file mode 100644 index 0000000..2a8c3b9 --- /dev/null +++ b/server/serverstop.txt @@ -0,0 +1,2 @@ +今現在サーバーは停止していません +もしサーバーを止めるならここに理由書こう \ No newline at end of file diff --git a/server/terms.txt b/server/terms.txt new file mode 100644 index 0000000..11bc436 --- /dev/null +++ b/server/terms.txt @@ -0,0 +1 @@ +利用規約、しっかり書こう \ No newline at end of file diff --git a/server/uwuzuabout.txt b/server/uwuzuabout.txt new file mode 100644 index 0000000..a0ebfcf --- /dev/null +++ b/server/uwuzuabout.txt @@ -0,0 +1,147 @@ +## 1. まずそもそもuwuzuとは何か +使っている方ならわかると思いますが普通のSNSです! +これと言った大きな特徴もなく、平凡で、なんとも言えないSNSです… +あっ!特徴かもしれないのが誰でもサーバーを建てられることです!!! +詳細は5. サーバーの立て方をご覧ください! +### 1.1 作られた理由は? +uwuzuは某X社のSNSを再構築しようと考えたdaichimarukanaにより作成されたSNSです() +uwuzuの読みはゆずです。 + +## 2. 誰でもサーバーを建てれるってことは、分散型? +残念っ! +uwuzuにはActivityPubやその他の連合用機能がないため基本的に導入されたサーバー中心の中央集権型SNSです! +今後いつかはActivityPubも導入しようかと思っています... + +## 3. 名前の由来って何? +おっ!いい着眼点ですねぇ~~~ +uwuzu(ゆず)の名前の由来は、開発者のdaichimarukanaがサービス名を考えていたときに某X社のSNSに「TwitterみたいなSNS作ってるけどサービス名が全く思いつかねぇ()」と投稿したところ思ったより多くの名前の案が集まり、 +その中に「With you」という名前の案があったところから来ています。 +daichimarukana < 「うぃずゆー(With you)」「うぃじゅー(witzou)」「うずー(wuzu)」「ゆず(yuzu)」あれっ?なんか普通すぎ?そうだ!!!!これでいいやん!!!! +### 「ゆず(uwuzu)」 + +ちなみに、この案が来るまでは「Twilus」という名前にする予定だったんですよっ! + +## 4. 開発言語は? +uwuzuはPHPとJS、HTML(プログラミング言語じゃないか)、CSSで作られています! +ライブラリはjQueryを導入しています! + +## 5. サーバーの建て方 +※MySQLの設定結構めんどいです。脆弱です。 +まず、Apache2とPHP 8とmysql Ver 15が導入されているサーバーを準備します! +次にSQLを設定します。(InnoDB) +まず、お好きな名前でDBを作成し、その中に、account,emoji,notice,role,ueuse,notificationとテーブルを作成します。 +テーブルの中身は以下のとおりです。 +照合順序は全て標準でutf8mb4_general_ciです。 +### account +- sysid(INT)(AUTO_INCREMENT ) アカウントが追加されるとカウントされるシステム用ID +- username(varchar(500)) ユーザーネーム保存用 +- userid(varchar(500)) ユーザーID保存用 +- password(varchar(1024)) パスワード保存用(ハッシュ化されます) +- loginid(varchar(256)) 自動ログイン時に本人アカウントか確認 +- mailadds(varchar(500)) メールアドレス保存用 +- profile(TEXT) プロフィールテキスト保存用 +- iconname(varchar(256)) アイコン画像名保存用 +- iconcontent(mediumblob) アイコン画像保存用 +- icontype(varchar(256)) アイコン画像拡張子保存用 +- iconsize(INT) アイコン画像サイズ保存用 +- headname(varchar(256)) ヘッダー画像名保存用 +- headcontent(mediumblob) ヘッダー画像保存用 +- headtype(varchar(256)) ヘッダー画像拡張子保存用 +- headsize(INT) ヘッダー画像サイズ保存用 +- role(varchar(1024)) 「user」のようなロール保存用 +- datetime(datetime) アカウント作成日時保存用 +- follow(text) アカウントがフォローしている人保存用 +- follower(text) アカウントがフォローされている人保存用 +- admin(varchar(25)) 管理者アカウントなら「yes」、それ以外なら「none」と入力。 + +### emoji +- sysid(INT)(AUTO_INCREMENT) アカウントが追加されるとカウントされるシステム用ID +- emojifile(varchar(512)) 絵文字ファイル名保存用 +- emojitype(varchar(256)) 絵文字拡張子保存用 +- emojicontent(mediumblob) 絵文字画像保存用 +- emojiname(varchar(512)) 「:emoji:」のような絵文字名保存用 +- emojiinfo(text) 絵文字についての説明保存用 +- emojidate(datetime) 絵文字登録日時保存用 + +### notice +- sysid(INT)(AUTO_INCREMENT) うんえいからのおしらせが追加されるとカウントされるシステム用ID +- title(varchar(1024)) お知らせのタイトル保存用 +- note(text) お知らせの内容保存用 +- account(varchar(500)) 編集者ID保存用 +- emojidate(datetime) お知らせ登録日時保存用 + +### role +- sysid(INT)(AUTO_INCREMENT) ロールが追加されるとカウントされるシステム用ID +- rolename(varchar(512)) ロール表示名保存用 +- roleauth(varchar(256)) ロールの権限保存用 +- rolecolor(varchar(25)) ロールの色保存用 +- roleidname(varchar(512)) 「user」のようなロール指定用 + +### ueuse +- sysid(INT)(AUTO_INCREMENT) 投稿されるとカウントされるシステム用ID +- account(varchar(256)) 投稿者ID保存用 +- uniqid(varchar(256)) 投稿ID保存用 +- rpuniqid(varchar(256)) リプライ先ID保存用 +- ueuse(text) 投稿内容保存用 +- photo1(varchar(512)) 投稿に添付されたファイルの保存ディレクトリ保存用 +- photo2(varchar(512)) 投稿に添付されたファイルの保存ディレクトリ保存用 +- video1(varchar(512)) 投稿に添付されたファイルの保存ディレクトリ保存用 +- datetime(datetime) 投稿日時保存用 +- favorite(text) いいね保存用 +- abi(text) 投稿者の追記保存用 +- abidate(datetime) 追記日時保存用 + +### notification +- sysid(INT)(AUTO_INCREMENT) 通知されるとカウントされるシステム用ID +- touserid(varchar(512)) 通知先ID保存用 +- title(varchar(1024)) 通知のタイトル +- msg(text) 通知の内容 +- datetime(datetime) 通知日時 +- userchk(varchar(25)) 通知の既読確認 + +### invitation +- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID +- code(varchar(512)) 招待コード +- used(varchar(25)) 使用済みかそうでないか +- datetime(datetime) 招待コード仕様日時更新用 + +すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、あとはApacheとphpとMy SQLを起動するだけ! +起動したらまずDBのroleにphpmyadminから「user」ロールを追加権限は「user」でOK。ロール名はとりあえず「一般ユーザー」ロールの色はHEXコード(#を除く)で000000のように指定。 +そしたら普通にuwuzuにアクセスして自分のアカウントを登録。 +それが終わったら一度サーバーを止め、uwuzuの動作ディレクトリ内のserverフォルダ内のファイルを各自設定 +ファイルの機能は以下の通り! +- admininfo.txt : 管理者名(てすとまる/@sampledayo) +- contact.txt : 管理者への連絡用メアド(sample@test.com) +- info.txt : サーバー登録時に表示されるメッセージ(好きな内容) +- privacypolicy.txt : プライバシーポリシー(サーバーのプライバシーポリシーを記載) +- servername.txt : サーバー名(てすとさば) +- terms.txt : 利用規約(サーバーの利用規約を記載) +- uwuzuabout.txt : このファイル(uwuzuを改造した場合は書き換え) +- uwuzuinfo.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) +- uwuzurelease.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) +- onlyuser.txt : 招待コード機能をオンにするかどうか、「true」でオン、「false」でオフ。招待コードはDBに直接追加。 + +### これでサーバーは完成!!! +結構脆弱だから気をつけてね... + +## 6. Android、iOS、その他OS向けのアプリについて +残念ですが今現在は公式アプリ等はなく、Webブラウザからお楽しみいただけます。 +誰かが作ってくれたらありがたいな~() + +## 7. 開発したいです!!! +uwuzuを自分の思うように改造して使いたい場合はAGPLライセンスのもと改造後ソースコードを公開するということで改造してください! +場合によってはdaichimarukanaの作る本家(?)uwuzuにも改造で追加された機能が実装されるかも...() +daichimarukanaと一緒に開発したいよ~って人は私のHPからメールとか某Xとかから連絡してくださいな~ + +## 8. ロゴは誰が作ったのですか? +ロゴはまだない。 +ロゴは下記のリンクよりuwuzuに関連しているコンテンツのみDLしてご利用いただけます。(uwuzuへ飛ぶリンクボタンなどはOK) + +### 色付き +#img ../img/uwuzucolorlogo.svg +### まっしろ +#img ../img/uwuzulogo.svg + + +編集者 : daichimarukana +最終更新日 : 2023/08/18 12:44 \ No newline at end of file diff --git a/server/uwuzuinfo.txt b/server/uwuzuinfo.txt new file mode 100644 index 0000000..84881d4 --- /dev/null +++ b/server/uwuzuinfo.txt @@ -0,0 +1,4 @@ +uwuzu +1.2.5 +2023/08/19 +daichimarukana,putonfps \ No newline at end of file diff --git a/server/uwuzurelease.txt b/server/uwuzurelease.txt new file mode 100644 index 0000000..ae9912c --- /dev/null +++ b/server/uwuzurelease.txt @@ -0,0 +1,105 @@ +## リリースノートだぜぇぇぇぇぇぇい!!!!!!! +ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) + +## Version 1.2.5 +リリース日:2023/08/19 +全てのデバイスでセッションを終了する機能を実装しました! +パスワードの復元をできるようにしました! + +## Version 1.2.4 +リリース日:2023/08/19 +二段階認証機能を実装しました! +使用ライブラリ - GoogleAuthenticator.php +ライセンス表示↓ +Copyright (c) 2012, Michael Kliewe All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +## Version 1.2.3 +リリース日:2023/08/18 +脆弱性の修正をしました。 +追記機能で二回文字列が変換されてしまうバグを修正しました。 +追記機能で絵文字とURLを使用できるようにしました! + +## Version 1.2.2 +リリース日:2023/08/18 +モバイル向けUIを変更しました。 +PutonFPSさんに手伝っていただきAPIの文字がUnicodeになってしまう問題を修正しました。 + +## Version 1.2.1 +リリース日:2023/08/18 +エラーコードをわかりやすくしました。 +追記でHTMLタグが二回変換される問題を修正しました。 + +## Version 1.2.0 +リリース日:2023/08/18 +招待コード機能を実装しました! +開発版のテストや鯖のスペック的にこれ以上ユーザーを受け入れられない場面で使えるかもです! + +## Version 1.1.6 +リリース日:2023/08/18 +API利用時にプロフィールに<h1>などのHTMLタグが含まれていると正しくAPIが取得できない問題を修正しました。 + +## Version 1.1.5 +リリース日:2023/08/18 +無限にログインしてしまう、またはアカウント登録が出来ない可能性のあるバグを修正しました。 +投稿に添付されているURLを新しいタブで開くようにしました。 +その他一部脆弱性を修正しました。 +無駄な処理をすこ~しだけなくしました。 +<h1>から<h3>、<cernter>、<font>を投稿内で使えてしまうと危険だと判断し、投稿の文字装飾機能を廃止しました。 +なお、投稿の文字装飾はMarkdownにし、復活予定です。 + +## Version 1.1.4 +リリース日:2023/08/17 +脆弱性に対しての応急処置です。 +全てのHTMLコードを無効化するよう修正しました。 + +## Version 1.1.3 +リリース日:2023/08/17 +早速脆弱性を見つけ出すとんでもない人間が出始めたので対策をしました() +部分的にUIを変更しました。 + +## Version 1.1.2 +リリース日:2023/08/17 +絵文字文字化けバグを修正しました。(文字コードをUTF8からUTF8mb4にしました。) + +## Version 1.1.1 +リリース日:2023/08/16 +小さなバグを修正しました。 + +## Version 1.1.0 +リリース日:2023/08/16 +超極激ヤババグを修正しました。 +ユーザーIDにハイフンが使えてしまうバグを修正しました。 + +## Version 1.0.0 +リリース日:2023/08/16 +### 初リリース!!!やったね!!!! +機能は以下の通り!遊んでみてね!!! +- 投稿(ユーズしよう!みんなに自分のつぶやきを見せつけるぞ!(?)) +- 投稿に画像添付(最大2枚まで画像を添付できるぞ!位置情報など漏洩しないよう写真にGPS情報が残っていないか厳重に注意しよう...) +- 投稿に動画添付(好きな動画を載せてみよう!) +- 投稿への追記(投稿者が追記できるよ!誤字ったりミスった時はこれを使おう!) +- フォロー(アカウントをフォロー!周りのユーザーとの交流を増やそう!) +- いいね(いいねを押してみよう!気軽にどのくらいの人が「いいね!」と思ったかがわかる優れものさ!) +- 返信(返信だ!少し手抜きで作ったから見た目はよろしくないけど十分使える機能だッ!どちらかと言えばスレッドといったほうがいいかも...) +- カスタム絵文字(自分の思うことを画像で表せるカスタム絵文字!サーバー管理者に追加してほしい絵文字を報告して追加してもらおう!) +- カスタム絵文字総合ページ(PCの人なら左側のメニューからアクセスできるかな!自分のお気に入りの絵文字をここから見つけよう!) +- 投稿の文字装飾(5つだけHTMLタグを開放したんだ!<h1>,<h2>,<h3>,<center>,<font>を使って自由に作ろう!) +- プロフィール(無いと困る機能だけど一応書いとくね~!自分や他のユーザーのプロフィールページだよッ!) +- 設定(無いと一番困る機能!少し操作が複雑だけど頑張って!) +- 検索(ユーザー検索は出来ないけど投稿は検索できるよ!「あの投稿がまた見たい...」というときに使おう!) +- 通知(今のところほぼ使い物にならないけど今後良くしていく予定!待っててくれよっ!) +- アカウント削除(消したくなったタイミングで自分の投稿やアカウントなどの情報を全て消せるよ!) +- API(開発者のみんな~!ちゃんとAPIを実装したよ!内容はユーザー情報の取得!それ以外はまだないけど...まぁ!
/api/userdata-api.php?userid=me2) +- PWA(スマホでも快適に!※動作未確認()) +- ダークモード(暗い夜でも目に優しく!) +他にも小さ~な機能は色々あるけどあまり気にならないだろうから今回はパスで! +ということで最初のバージョンであるuwuzu 1.0.0をお楽しみください! \ No newline at end of file diff --git a/settings/addauthcode.php b/settings/addauthcode.php new file mode 100644 index 0000000..6ecf1c8 --- /dev/null +++ b/settings/addauthcode.php @@ -0,0 +1,253 @@ + 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(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +require_once '../authcode/GoogleAuthenticator.php'; + +if(empty($_SESSION['secretcode'])){ + $authcode = new PHPGangsta_GoogleAuthenticator(); + $secret = $authcode->createSecret(); + $_SESSION['secretcode'] = $secret; +}else{ + $authcode = new PHPGangsta_GoogleAuthenticator(); + $secret = $_SESSION['secretcode']; +} + +if( !empty($_POST['btn_submit']) ) { + $chkauthcode = new PHPGangsta_GoogleAuthenticator(); + //二段階認証の確認 + $userauthcode = $_POST['usercode']; + + $discrepancy = 2; + + $checkResult = $chkauthcode->verifyCode($secret, $userauthcode, $discrepancy); + if ($checkResult) { + if( empty($error_message) ) { + $secret = $_SESSION['secretcode']; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET authcode = :authcode WHERE userid = :userid"); + + $stmt->bindValue(':authcode', $secret, PDO::PARAM_STR); + + // ユーザーIDのバインド(WHERE句に必要) + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + // リダイレクト先のURLへ転送する + $url = 'success.php'; + header('Location: ' . $url, true, 303); + exit; + } else { + $error_message[] = '更新に失敗しました。'; + } + + // プリペアドステートメントを削除 + $stmt = null; + } + } else { + $error_message[] = "二段階認証が出来ませんでした。再度お試しください。"; + } +} + + + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + +設定 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ + +
+

二段階認証の登録

+ +
    + +

    + +
+ + + getQRCodeGoogleUrl($name, $secret, $title); + ?> + + +

以下の二次元コードより二段階認証をセットアップしてください。

+

セットアップが完了したら入力ボックスにコードを入力して「次へ」ボタンを押してください!
注意:まだ二段階認証の設定は終わっていません。次へを押すと設定が完了します。

+
+ +
+
+

二段階認証コード

+
先程セットアップして出力された6桁のコードを入力してください。
+ +
+ + + +
+
+ + + + + + \ No newline at end of file diff --git a/settings/index.php b/settings/index.php index 36a3532..26d58e9 100644 --- a/settings/index.php +++ b/settings/index.php @@ -25,8 +25,8 @@ $option = null; session_start(); -$userid = $_SESSION['userid']; -$username = $_SESSION['username']; +$userid = htmlentities($_SESSION['userid']); +$username = htmlentities($_SESSION['username']); try { @@ -128,7 +128,7 @@ if( !empty($pdo) ) { $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); - $rerole = $dbh->prepare("SELECT username, userid, password, mailadds, profile, iconname, iconcontent, icontype, iconsize, headname, headcontent, headtype, headsize, role, datetime FROM account WHERE userid = :userid"); + $rerole = $dbh->prepare("SELECT username, userid, password, mailadds, profile, iconname, iconcontent, icontype, iconsize, headname, headcontent, headtype, headsize, role, datetime, authcode FROM account WHERE userid = :userid"); $rerole->bindValue(':userid', $userid); // SQL実行 @@ -580,6 +580,57 @@ if( !empty($_POST['logout']) ) { exit; } +if( !empty($_POST['auth_on_submit']) ) { + $_SESSION['userid'] = $userid; + // リダイレクト先のURLへ転送する + $url = 'addauthcode.php'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; +} + +if( !empty($_POST['auth_off_submit']) ) { + if( empty($error_message) ) { + $secret = ""; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET authcode = :authcode WHERE userid = :userid"); + + $stmt->bindValue(':authcode', $secret, PDO::PARAM_STR); + + // ユーザーIDのバインド(WHERE句に必要) + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; + } else { + $error_message[] = '更新に失敗しました。'; + } + + // プリペアドステートメントを削除 + $stmt = null; + } +} // データベースの接続を閉じる $pdo = null; @@ -647,6 +698,7 @@ $pdo = null; +

パスワード

@@ -654,6 +706,15 @@ $pdo = null; +
+ + + +

下のボタンを押すとすぐに解除されます。確認などはありません。気をつけてください。

+ + diff --git a/settings/success.php b/settings/success.php new file mode 100644 index 0000000..915151c --- /dev/null +++ b/settings/success.php @@ -0,0 +1,156 @@ + 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(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, time() + 60 * 60 * 24 * 14); + setcookie('username', $username, time() + 60 * 60 * 24 * 14); + setcookie('loginid', $res["loginid"], time() + 60 * 60 * 24 * 14); + setcookie('admin_login', true, time() + 60 * 60 * 24 * 14); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} +?> + + + + + + + + + + +設定 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ + +
+

二段階認証登録完了

+ +
    + +

    + +
+ + +

登録完了!セキュリティの強化にご協力いただきありがとうございます!
(≧∇≦)

+ + 戻る +
+
+ + + + + + \ No newline at end of file diff --git a/success.php b/success.php index e355fb1..d2cca35 100644 --- a/success.php +++ b/success.php @@ -1,41 +1,41 @@ - - - - - - - - - - - -アカウント登録完了!!! - <?php echo file_get_contents($servernamefile);?> - - - - - - - -
- - -
-

アカウント作成完了!

-


いぇ~い!

-

88888888888

-

アカウント登録が完了しました!

- - -
-
- - - + + + + + + + + + + + +アカウント登録完了!!! - <?php echo file_get_contents($servernamefile);?> + + + + + + + +
+ + +
+

アカウント作成完了!

+


いぇ~い!

+

88888888888

+

アカウント登録が完了しました!

+ + +
+
+ + + \ No newline at end of file diff --git a/sw.js b/sw.js index a999c24..024cdc2 100644 --- a/sw.js +++ b/sw.js @@ -1,42 +1,42 @@ -var CACHE_NAME = "app_uwuzu"; -var urlsToCache = [ - "home/index.php", - "search/index.php", - "require/botbox.php", - "require/leftbox.php", - "require/rightbox.php", - "require/botbox.php", - "user/index.php", - "settings/index.php", - "rule/terms.php", - "rule/privacypolicy.php", - "rule/uwuzuabout.php", - "index.php", - "login.php", - "new.php", - "check.php", - "success.php", -]; - -self.addEventListener('install', function(event) { - event.waitUntil( - caches.open(CACHE_NAME) - .then( - function(cache){ - return cache.addAll(urlsToCache); - }) - ); -}); - -self.addEventListener('fetch', function(event) { - event.respondWith( - caches.match(event.request) - .then( - function (response) { - if (response) { - return response; - } - return fetch(event.request); - }) - ); +var CACHE_NAME = "app_uwuzu"; +var urlsToCache = [ + "home/index.php", + "search/index.php", + "require/botbox.php", + "require/leftbox.php", + "require/rightbox.php", + "require/botbox.php", + "user/index.php", + "settings/index.php", + "rule/terms.php", + "rule/privacypolicy.php", + "rule/uwuzuabout.php", + "index.php", + "login.php", + "new.php", + "check.php", + "success.php", +]; + +self.addEventListener('install', function(event) { + event.waitUntil( + caches.open(CACHE_NAME) + .then( + function(cache){ + return cache.addAll(urlsToCache); + }) + ); +}); + +self.addEventListener('fetch', function(event) { + event.respondWith( + caches.match(event.request) + .then( + function (response) { + if (response) { + return response; + } + return fetch(event.request); + }) + ); }); \ No newline at end of file diff --git a/ueuse/index.php b/ueuse/index.php index cec3dae..6601196 100644 --- a/ueuse/index.php +++ b/ueuse/index.php @@ -28,8 +28,8 @@ $option = null; session_start(); -$userid = $_SESSION['userid']; -$username = $_SESSION['username']; +$userid = htmlentities($_SESSION['userid']); +$username = htmlentities($_SESSION['username']); try { @@ -113,19 +113,19 @@ if(empty($username)){ exit; } -$ueuseid = str_replace('!', '', $_GET['ueuseid']); -$touserid = str_replace('~', '', $_GET['touser']); +$ueuseid = htmlentities(str_replace('!', '', $_GET['ueuseid'])); +$touserid = htmlentities(str_replace('~', '', $_GET['touser'])); if( !empty($_POST['btn_submit']) ) { - $ueuse = $_POST['ueuse']; + + $ueuse = htmlentities($_POST['ueuse']); // メッセージの入力チェック if( empty($ueuse) ) { $error_message[] = '内容を入力してください。'; } else { - // 文字数を確認 if( 1024 < mb_strlen($ueuse, 'UTF-8') ) { $error_message[] = '内容は1024文字以内で入力してください。'; @@ -154,7 +154,15 @@ if( !empty($_POST['btn_submit']) ) { if ($result) { $photo1 = $uploadedPath; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!(1)エラーコード:' . $uploadedFile['error'].'
'.var_dump($_FILES['upload_images']); + $errnum = $uploadedFile['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } @@ -186,11 +194,18 @@ if( !empty($_POST['btn_submit']) ) { if ($result2) { $photo2 = $uploadedPath2; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!(2)エラーコード:' . $uploadedFile2['error'].'
'.var_dump($_FILES['upload_images']); + $errnum = $uploadedFile2['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } - if (empty($_FILES['upload_videos1']['name'])) { $video1 = "none"; } else { @@ -215,13 +230,22 @@ if( !empty($_POST['btn_submit']) ) { if ($result3) { $video1 = $uploadedPath3; // 保存されたファイルのパスを使用 } else { - $error_message[] = 'アップロード失敗!エラーコード:' . $uploadedFile3['error']; + $errnum = $uploadedFile3['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; } } else { $error_message[] = '対応していないファイル形式です!'; } + } if( empty($error_message) ) { @@ -334,7 +358,7 @@ $pdo = null; -ID <?php echo htmlspecialchars($ueuseid, ENT_QUOTES, 'UTF-8'); ?> のユーズ - uwuzu +ID <?php echo htmlentities($ueuseid, ENT_QUOTES, 'UTF-8'); ?> のユーズ - uwuzu @@ -355,7 +379,7 @@ $pdo = null;
- +

画像のEXIF情報(位置情報など)は削除されません。
情報漏洩に気をつけてくださいね…