PHP ile Güvenli Login Sistemi (Session + Token Mantığı)

1. Giriş: Neden Güvenli Bir Login Sistemi Gerekir? Günümüzde web siteleri için en önemli konulardan biri güvenliktir.Bir kullanıcı sisteme giriş yaptığında, verileri korunmalı, kimlik doğrulaması doğru yapılmalı ve saldırılara karşı savunma mekanizmaları olmalıdır. PHP, doğru kullanıldığında güvenli login sistemleri kurmak için oldukça güçlü bir dildir.Ancak hatalı kullanılırsa, SQL Injection, Session Hijacking veya CSRF gibi saldırılara

Google News Google News Flipboard Flipboard Sesli oku Yazıyı beğen Favorilere Ekle 0 Yorumlar
Daha fazla

1. Giriş: Neden Güvenli Bir Login Sistemi Gerekir?

Günümüzde web siteleri için en önemli konulardan biri güvenliktir.
Bir kullanıcı sisteme giriş yaptığında, verileri korunmalı, kimlik doğrulaması doğru yapılmalı ve saldırılara karşı savunma mekanizmaları olmalıdır.

PHP, doğru kullanıldığında güvenli login sistemleri kurmak için oldukça güçlü bir dildir.
Ancak hatalı kullanılırsa, SQL Injection, Session Hijacking veya CSRF gibi saldırılara kapı aralayabilir.

Benim Düşüncem:

“Login sistemi bir sitenin kapısıdır. Kapı ne kadar sağlam olursa, içerideki değer de o kadar güvende olur.”


🔹 2. PHP ile Login Sisteminin Temel Yapısı

Bir login sistemi 4 ana bileşenden oluşur:

  1. Kullanıcı formu (HTML)

  2. Veritabanı bağlantısı (MySQL)

  3. Kimlik doğrulama (PHP)

  4. Session yönetimi

Basit örnek bir form:

<form method="POST" action="login.php">
<input type="text" name="username" placeholder="Kullanıcı Adı" required>
<input type="password" name="password" placeholder="Şifre" required>
<button type="submit">Giriş Yap</button>
</form>

🔹 3. Veritabanı Yapısı

Kullanıcı verilerini saklamak için örnek tablo:

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
password VARCHAR(255),
token VARCHAR(64),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Şifreleri asla düz metin olarak saklama. Bunun yerine PHP’nin password_hash() fonksiyonunu kullan:

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

Benim Düşüncem:

“Şifreleri açık saklamak, kasanın anahtarını dışarıda bırakmak gibidir. Güvenlik, veriyle başlar.”


🔹 4. PHP ile Giriş Kontrolü (Session Başlangıcı)

session_start();
require 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();

if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
} else {
echo "Hatalı kullanıcı adı veya şifre!";
}
}

Bu yapı, kullanıcıyı doğrular ve session başlatır.

Benim Düşüncem:

“Session, kimlik doğrulamanın ruhudur. Ama doğru kullanılmazsa en büyük açık haline gelir.”


🔹 5. Token Mantığı Nedir ve Neden Kullanılır?

Token sistemi, güvenliği bir adım öteye taşır.
Her kullanıcı giriş yaptığında, ona özel bir token oluşturulur ve bu token oturum boyunca kullanılır.

Token üretmek:

function generateToken() {
return bin2hex(random_bytes(32));
}

Kullanıcı giriş yaptığında:

$token = generateToken();
$stmt = $conn->prepare("UPDATE users SET token = ? WHERE id = ?");
$stmt->execute([$token, $user['id']]);
$_SESSION['token'] = $token;

Benim Düşüncem:

“Token, kullanıcıya özel dijital bir anahtardır. Güvenliğin modern anahtarı budur.”


🔹 6. Dashboard (Korumalı Alan) Oluşturma

session_start();
require 'db.php';

if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit;
}

echo "Hoş geldin, " . htmlspecialchars($_SESSION['username']);

Burada htmlspecialchars() kullanmak XSS saldırılarına karşı koruma sağlar.

Benim Düşüncem:

“Korumalı alan bir kale gibidir. Duvarlarını kodla ör, sadece anahtarı olanlar girebilsin.”


🔹 7. Logout (Güvenli Çıkış) İşlemi

session_start();
session_unset();
session_destroy();
header("Location: login.php");

Ek olarak token’ı da sıfırlayabilirsin:

$stmt = $conn->prepare("UPDATE users SET token = NULL WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);

🔹 8. Gelişmiş Güvenlik Katmanları

🔸 CSRF Koruması

Formlara CSRF token ekleyerek sahte istekleri önleyebilirsin.

$_SESSION['csrf'] = bin2hex(random_bytes(32));

Form içinde:

<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf'] ?>">

Kontrol:

if ($_POST['csrf_token'] !== $_SESSION['csrf']) {
die("Güvenlik hatası!");
}

🔸 Rate Limiting (Deneme Sınırı)

Aynı IP’den belli sayıda hatalı giriş sonrası bloke et:

if ($login_attempts > 5) {
die("Çok fazla deneme yaptınız. Lütfen 15 dakika bekleyin.");
}

🔹 9. Modern PHP ile Login Sistemi Geliştirme (PDO + MVC)

Eğer projeni büyütmek istiyorsan, yapıyı MVC formatına dönüştürebilirsin.
Bu hem okunabilirliği hem de güvenliği artırır.

Model:

class UserModel {
public function login($username, $password) {
// PDO ile sorgu
}
}

Controller:

class LoginController {
public function index() {
include 'views/login.php';
}
}

Benim Düşüncem:

“MVC yapısı, projeni organize eder. Kodu düzenli tutmak, geleceğe yatırım yapmaktır.”


🔹 10. Sonuç: Güvenli Login Sisteminin Temelleri

Artık PHP ile güvenli bir giriş sisteminin nasıl kurulacağını biliyorsun:

  • Hash’lenmiş şifreler

  • Session yönetimi

  • Token üretimi

  • CSRF koruması

  • PDO ile güvenli sorgular

Benim Düşüncem:

“Bir login sistemi, sadece giriş kapısı değil, güvenin sembolüdür. Kullanıcı sisteme korkmadan girmeli, sen de huzurla kod yazmalısın.”

Yazar Hakkında

Benzer Yazılar

Bir Cevap Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

0/30 karakter