Aşağıdaki index.php kodundan login olduğumda dashboard.php sayfasına yönlendirmiyor. Session taraflarında hata var ama gözümden kaçıyor. İkinci bir göz olarak inceleyebilen olursa sevinirim.
//index.php
<?php error_reporting(E_ALL); ini_set('display_errors', 1); // Session başlatmadan önce çıktı tamponlamasını başlatalım ob_start(); // Session ayarlarını session_start()'dan ÖNCE yapıyoruz ini_set('session.gc_maxlifetime', 1800); // 30 dakika ini_set('session.cookie_httponly', 1); ini_set('session.cookie_secure', 1); ini_set('session.use_only_cookies', 1); session_start(); require_once 'conf/config.php'; require_once 'conf/security.php'; require_once 'conf/recaptcha_config.php'; // Log fonksiyonunu ekleyelim function writeLog($message) { // Zaman dilimini İstanbul'a göre ayarla date_default_timezone_set('Europe/Istanbul'); $logDir = __DIR__ . '/logs'; $today = date('Y-m-d'); $logFile = $logDir . '/' . $today . '.log'; // Logs klasörü yoksa oluştur if (!file_exists($logDir)) { mkdir($logDir, 0755, true); } // Log mesajını GMT+3'e göre hazırla $timestamp = date('Y-m-d H:i:s'); $logMessage = "[{$timestamp}] {$message}" . PHP_EOL; // Dosyaya yaz file_put_contents($logFile, $logMessage, FILE_APPEND); } if ($_SERVER["REQUEST_METHOD"] == "POST") { try { // Giriş denemelerini sınırla if (!isset($_SESSION['login_attempts'])) { $_SESSION['login_attempts'] = 0; } if (!isset($_SESSION['last_attempt'])) { $_SESSION['last_attempt'] = time(); } if ($_SESSION['login_attempts'] >= 5) { if (time() - $_SESSION['last_attempt'] < 3) { // 5 dakika bekletme writeLog("Çok fazla başarısız deneme. IP: " . $_SERVER['REMOTE_ADDR']); throw new Exception("Çok fazla başarısız deneme yaptınız. Lütfen 5 dakika bekleyin."); } else { // Süre dolmuşsa sayacı sıfırla $_SESSION['login_attempts'] = 0; $_SESSION['last_attempt'] = time(); } } // CSRF kontrolü ekle if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { throw new Exception('CSRF token doğrulaması başarısız!'); } // reCAPTCHA doğrulaması ekle if (!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) { writeLog("reCAPTCHA yanıtı eksik. IP: " . $_SERVER['REMOTE_ADDR']); throw new Exception("Lütfen robot olmadığınızı doğrulayın."); } $recaptcha_response = $_POST['g-recaptcha-response']; $verify_url = "https://www.google.com/recaptcha/api/siteverify"; $data = [ 'secret' => RECAPTCHA_SECRET_KEY, 'response' => $recaptcha_response, 'remoteip' => $_SERVER['REMOTE_ADDR'] ]; // CURL kullanarak daha güvenli bir HTTP isteği yap $ch = curl_init($verify_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $verify_response = curl_exec($ch); if (curl_errno($ch)) { writeLog("reCAPTCHA doğrulama hatası: " . curl_error($ch)); throw new Exception("Güvenlik doğrulaması başarısız oldu. Lütfen daha sonra tekrar deneyin."); } curl_close($ch); $captcha_success = json_decode($verify_response); if (!$captcha_success->success) { writeLog("reCAPTCHA doğrulaması başarısız. IP: " . $_SERVER['REMOTE_ADDR'] . " Hata kodları: " . json_encode($captcha_success->{"error-codes"})); throw new Exception("Robot doğrulaması başarısız oldu. Lütfen tekrar deneyin."); } // Minimum skor kontrolü (v3 için) if (isset($captcha_success->score) && $captcha_success->score < 0.5) { writeLog("reCAPTCHA skoru düşük: " . $captcha_success->score . " IP: " . $_SERVER['REMOTE_ADDR']); throw new Exception("Güvenlik doğrulaması başarısız oldu. Lütfen tekrar deneyin."); } $conn = connectDB(); if (!$conn) { throw new Exception("Veritabanı bağlantısı başarısız!"); } $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new Exception("Geçersiz e-posta formatı!"); } $password = $_POST['password']; // Kullanıcı kontrolü $sql = "SELECT * FROM kullanicilar WHERE Mail = ? AND Sifre = CONVERT(VARBINARY(128), ?)"; $params = array($email, hashPassword($password)); $stmt = sqlsrv_query($conn, $sql, $params); if ($stmt === false) { writeLog("Sorgu hatası: " . print_r(sqlsrv_errors(), true) . " - IP: " . $_SERVER['REMOTE_ADDR']); throw new Exception("Sorgu hatası: " . print_r(sqlsrv_errors(), true)); } if (sqlsrv_has_rows($stmt)) { // Kullanıcı doğrulandı $user = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); // Debug için ekran çıktısı error_log("Login successful for user: " . $user['Mail']); error_log("User ID: " . $user['ID']); // Session değişkenlerini ayarla $_SESSION['user_id'] = $user['ID']; $_SESSION['email'] = $user['Mail']; $_SESSION['authenticated'] = true; // Yeni eklenen güvenlik kontrolü // Session'ı kaydet session_regenerate_id(true); // Güvenlik için session ID'yi yenile // Başarılı giriş logunu yaz writeLog("Başarılı giriş - Kullanıcı: " . $user['Mail'] . " - IP: " . $_SERVER['REMOTE_ADDR']); // Çıktı tamponunu temizle ob_end_clean(); // Direkt yönlendirme yap header("Location: admin_dashboard.php"); exit(); } else { // Başarısız giriş throw new Exception("Geçersiz email veya şifre!"); } } catch (Exception $e) { $error_message = $e->getMessage(); $_SESSION['login_attempts']++; $_SESSION['last_attempt'] = time(); // Hata durumunu logla writeLog("Hata: " . $error_message . " - IP: " . $_SERVER['REMOTE_ADDR'] . " - Deneme sayısı: " . $_SESSION['login_attempts']); } finally { if (isset($conn) && $conn) { sqlsrv_close($conn); } } } // CSRF token oluştur if (!isset($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } ?> <!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-Content-Type-Options" content="nosniff"> <meta http-equiv="X-Frame-Options" content="DENY"> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ 'unsafe-inline'; frame-src https://www.google.com/recaptcha/;"> <title>Giriş Yap</title> <link rel="stylesheet" href="css/login.css?v=<?php echo time(); ?>"> <link rel="stylesheet" href="fonts/loginpagefont.css?v=<?php echo time(); ?>"> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body> <div class="login-container"> <div class="login-header"> </div> <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" autocomplete="off"> <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>"> <?php if (isset($error_message)): ?> <div class="error-message" role="alert"> <?php echo htmlspecialchars($error_message); ?> </div> <?php endif; ?> <div class="form-group"> <label for="email">E-posta</label> <input type="email" id="email" name="email" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$" autocomplete="username" value="<?php echo isset($_POST['email']) ? htmlspecialchars($_POST['email']) : ''; ?>"> </div> <div class="form-group"> <label for="password">Şifre</label> <input type="password" id="password" name="password" required minlength="8" autocomplete="current-password"> </div> <div class="form-group"> <div class="g-recaptcha" data-sitekey="<?php echo RECAPTCHA_SITE_KEY; ?>"></div> </div> <button type="submit" class="login-btn">Giriş Yap</button> </form> <div class="forgot-password"> <a href="sifremi-unuttum.php">Şifremi Unuttum</a> </div> </div> </body> </html>//dashboard.php
<?php require_once 'conf/config.php'; session_start(); // Oturum kontrolü if (!isset($_SESSION['logged_in'])) { header('Location: index.php'); exit(); } // MSSQL bağlantısı $conn = connectDB(); if (!$conn) { die("Veritabanı bağlantısı başarısız!"); } // Sorguyu çalıştır ve sonuçları al try { $sql = "SELECT * FROM mfirewall ORDER BY mfirewallid"; $result = sqlsrv_query($conn, $sql); if ($result === false) { throw new Exception("Sorgu hatası: " . print_r(sqlsrv_errors(), true)); } } catch (Exception $e) { die("Sorgu başarısız: " . $e->getMessage()); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>F I R E W A L L</title> <link rel="stylesheet" href="css/normalize.min.css"> <link rel="stylesheet" href="css/style.css"> <script src="js/prefixfree.min.js"></script> <style> @font-face { font-family: 'Centaur'; src: url('fonts/Centaur.woff2') format('woff2'), url('fonts/Centaur.woff') format('woff'), url('fonts/Centaur.ttf') format('truetype'); } h1 { font-family: 'Centaur', serif; font-size: 40px; /* Neon için daha büyük */ letter-spacing: 0.3em; text-align: center; color: #ffffff; /* Beyaz renk */ text-shadow: 0 0 10px #ffffff, /* Daha parlak ve geniş glow efekti */ 0 0 20px #ffffff, /* Daha geniş glow efekti */ 0 0 30px #ffb3ff, /* Pembe-mor dış hat parlama */ 0 0 40px #ffb3ff, /* Uzak pembe parlama */ 0 0 60px #ff99ff, /* Daha geniş pembe parlama */ 0 0 80px #cc33ff; /* En uzak mor parlama */ animation: neon-flicker 1.5s infinite alternate; /* Neon flicker animasyonu */ } /* Neon flicker animasyonu */ @keyframes neon-flicker { 0% { opacity: 1; text-shadow: 0 0 10px #ffffff, 0 0 20px #ffffff, 0 0 30px #ffb3ff, 0 0 40px #ffb3ff, 0 0 60px #ff99ff, 0 0 80px #cc33ff; } 50% { opacity: 0.9; text-shadow: 0 0 8px #ffffff, 0 0 15px #ffffff, 0 0 25px #ffb3ff, 0 0 35px #ffb3ff, 0 0 55px #ff99ff, 0 0 75px #cc33ff; } 100% { opacity: 0.8; text-shadow: 0 0 5px #ffffff, 0 0 10px #ffffff, 0 0 20px #ffb3ff, 0 0 30px #ffb3ff, 0 0 50px #ff99ff, 0 0 70px #cc33ff; } } </style> </head> <body> <div> <h1>FIREWALL</h1> <a href="addfrwmenu.php" style="color: white; font-weight: bold; background-color: transparent; border: 2px solid white; padding: 10px 20px; border-radius: 5px; text-decoration: none; transition: background-color 0.3s;"><b>Ekle<b></a> <a href="logout.php" style="color: white; font-weight: bold; background-color: transparent; border: 2px solid white; padding: 10px 20px; border-radius: 5px; text-decoration: none; transition: background-color 0.3s;"><b>Çıkış<b></a> <a:hover { background-color: rgba(255, 255, 255, 0.1); } </div> <div class="content"> <br> <table width='80%' border=2> <tr bgcolor='#CCCCCC'> <td><b>IP ADRES</b></td> <td><b>PORT</b></td> <td><b>ACIKLAMA</b></td> <td><b>AKSIYON</b></td> </tr> <?php // Veritabanından gelen sonuçları döngü ile ekrana yazdır while ($res = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { echo "<tr>"; echo "<td style='color: white; font-weight: bold;'>".$res['mfirewallip']."</td>"; echo "<td style='color: white; font-weight: bold;'>".$res['mfirewallport']."</td>"; echo "<td style='color: white; font-weight: bold;'>".$res['mfirewalldesc']."</td>"; echo "<td><a href='delete.php?mfirewallid=".$res['mfirewallid']."' onClick='return confirm(\"Are you sure you want to delete?\")' style='color: white; font-weight: bold; background-color: transparent; border: 1px solid white; padding: 2px 10px; border-radius: 3px; text-decoration: none; font-size: 14px; transition: background-color 0.3s;'>S i l</a></td>"; echo "</tr>"; } echo "<style> a:hover { background-color: rgba(255, 255, 255, 0.1); } </style>"; ?> </table> </div> <?php // Bağlantıyı kapat sqlsrv_close($conn); ?> </body> </html>