Преглед на файлове

Check that account still exists when doing something

Miraty преди 2 години
родител
ревизия
9173336714
променени са 4 файла, в които са добавени 21 реда и са изтрити 11 реда
  1. 9 0
      fn/auth.php
  2. 10 5
      fn/common.php
  3. 1 5
      pages/auth/logout.php
  4. 1 1
      pages/auth/unregister.php

+ 9 - 0
fn/auth.php

@@ -55,6 +55,15 @@ function changePassword($id, $password) {
 	$stmt->execute();
 	$stmt->execute();
 }
 }
 
 
+function logout() {
+	if (session_status() === PHP_SESSION_ACTIVE)
+		session_destroy();
+
+	header('Clear-Site-Data: "*"');
+
+	redir();
+}
+
 function rateLimit() {
 function rateLimit() {
 	if (PAGE_METADATA['tokens_account_cost'] ?? 0 > 0)
 	if (PAGE_METADATA['tokens_account_cost'] ?? 0 > 0)
 		rateLimitAccount(PAGE_METADATA['tokens_account_cost']);
 		rateLimitAccount(PAGE_METADATA['tokens_account_cost']);

+ 10 - 5
fn/common.php

@@ -20,12 +20,17 @@ function output($code, $msg = '', $logs = ['']) {
 function processForm($requireLogin = true) {
 function processForm($requireLogin = true) {
 	if (http_response_code() !== 200)
 	if (http_response_code() !== 200)
 		return false;
 		return false;
-	if (empty($_POST) AND $requireLogin AND !isset($_SESSION['id']))
-		echo '<p>Ce formulaire ne sera pas accepté car il faut <a class="auth" href="' . redirUrl('auth/login') . '">se connecter</a> avant.</p>';
-	if (empty($_POST))
+	if ($_POST === []) {
+		if ($requireLogin AND !isset($_SESSION['id']))
+			echo '<p>Ce formulaire ne sera pas accepté car il faut <a class="auth" href="' . redirUrl('auth/login') . '">se connecter</a> avant.</p>';
 		return false;
 		return false;
-	if ($requireLogin AND !isset($_SESSION['id']))
-		output(403, 'Vous devez être connecté·e pour effectuer cette action.');
+	}
+	if ($requireLogin) {
+		if (isset($_SESSION['id']) !== true)
+			output(403, 'Vous devez être connecté·e à un compte pour effectuer cette action.');
+		if (isset(query('select', 'users', ['id' => $_SESSION['id']], 'id')[0]) !== true)
+			output(403, 'Ce compte n\'existe plus. Déconnectez-vous pour terminer cette session fantôme.');
+	}
 	return true;
 	return true;
 }
 }
 
 

+ 1 - 5
pages/auth/logout.php

@@ -1,7 +1,3 @@
 <?php
 <?php
 
 
-if (session_status() === PHP_SESSION_ACTIVE)
-	session_destroy();
-
-header('Clear-Site-Data: "*"');
-redir();
+logout();

+ 1 - 1
pages/auth/unregister.php

@@ -36,7 +36,7 @@ if (processForm()) {
 
 
 	query('delete', 'users', ['id' => $_SESSION['id']]);
 	query('delete', 'users', ['id' => $_SESSION['id']]);
 
 
-	require 'logout.php';
+	logout();
 
 
 	output(200, 'Compte supprimé.');
 	output(200, 'Compte supprimé.');
 }
 }