| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-17 14:50:57 +00:00
										 |  |  | require_once __DIR__ . '/../helpers/security.php'; | 
					
						
							| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-19 13:31:01 +00:00
										 |  |  | function applyCsrfMiddleware() { | 
					
						
							| 
									
										
										
										
											2025-04-25 07:13:12 +00:00
										 |  |  |     global $logObject, $user_IP; | 
					
						
							| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  |     $security = SecurityHelper::getInstance(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Skip CSRF check for GET requests
 | 
					
						
							|  |  |  |     if ($_SERVER['REQUEST_METHOD'] === 'GET') { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-12 13:28:33 +00:00
										 |  |  |     // Skip CSRF check for initial login, registration, and 2FA verification attempts
 | 
					
						
							|  |  |  |     if ($_SERVER['REQUEST_METHOD'] === 'POST' && | 
					
						
							|  |  |  |         isset($_GET['page']) && isset($_GET['action']) && | 
					
						
							|  |  |  |         $_GET['page'] === 'login' && $_GET['action'] === 'verify' && | 
					
						
							|  |  |  |         isset($_SESSION['2fa_pending_user_id'])) { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-23 15:48:02 +00:00
										 |  |  |     // Skip CSRF check for initial login and registration attempts
 | 
					
						
							| 
									
										
										
										
											2025-04-12 13:28:33 +00:00
										 |  |  |     if ($_SERVER['REQUEST_METHOD'] === 'POST' && | 
					
						
							|  |  |  |         isset($_GET['page']) && | 
					
						
							|  |  |  |         in_array($_GET['page'], ['login', 'register']) && | 
					
						
							| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  |         !isset($_SESSION['username'])) { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Check CSRF token for all other POST requests
 | 
					
						
							|  |  |  |     if ($_SERVER['REQUEST_METHOD'] === 'POST') { | 
					
						
							| 
									
										
										
										
											2025-04-11 13:55:08 +00:00
										 |  |  |         // Check for token in POST data or headers
 | 
					
						
							|  |  |  |         $token = $_POST['csrf_token'] ?? $_SERVER['HTTP_X_CSRF_TOKEN'] ?? ''; | 
					
						
							| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  |         if (!$security->verifyCsrfToken($token)) { | 
					
						
							|  |  |  |             // Log CSRF attempt
 | 
					
						
							| 
									
										
										
										
											2025-04-25 07:13:12 +00:00
										 |  |  |             $ipAddress = $user_IP; | 
					
						
							| 
									
										
										
										
											2025-02-23 11:51:36 +00:00
										 |  |  |             $logMessage = sprintf( | 
					
						
							|  |  |  |                 "CSRF attempt detected - IP: %s, Page: %s, User: %s", | 
					
						
							| 
									
										
										
										
											2025-02-23 15:58:26 +00:00
										 |  |  |                 $ipAddress, | 
					
						
							| 
									
										
										
										
											2025-02-23 11:51:36 +00:00
										 |  |  |                 $_GET['page'] ?? 'unknown', | 
					
						
							|  |  |  |                 $_SESSION['username'] ?? 'anonymous' | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2025-04-27 16:00:58 +00:00
										 |  |  |             $logObject->log('error', $logMessage, ['user_id' => null, 'scope' => 'system']); | 
					
						
							| 
									
										
										
										
											2025-01-30 16:47:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // Return error message
 | 
					
						
							|  |  |  |             http_response_code(403); | 
					
						
							|  |  |  |             die('Invalid CSRF token. Please try again.'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } |