![]() |
|
||||||
| Web Programlama Bir web programlama dili ve veritabanı ile dinamik içerikli web siteleri yapmayı amaçlar. |
| ||
|
|
LinkBack | Seçenekler | Stil |
|
|
#1 |
|
Çevrimdışı
|
[PHP] Kullanıcı Kayıt, Giriş ve Güvenli Auth Sistemi - 2026 Güncel (Token + Email Doğrulama)
Merhaba, 2026 itibarıyla güncel güvenlik pratiklerini uygulayan, sade ama sağlam bir kayıt/giriş sistemi. ━━━━━━━━━━ SİSTEM NE İÇERİYOR? ━━━━━━━━━━ Auth.php — Merkezi Sınıf Tüm kimlik doğrulama mantığı tek bir sınıfta toplandı. Dışarıdan sadece şu metodları çağırırsınız: Kod:
$auth = new Auth($db); $auth->register($username, $email, $password); // Kayıt $auth->login($identifier, $password, $remember); // Giriş $auth->logout(); // Çıkış $auth->verifyEmail($token); // E-posta doğrulama $auth->requestPasswordReset($email); // Şifre sıfırlama isteği $auth->resetPassword($token, $new_password); // Yeni şifre belirle $auth->check(); // Oturum var mı? $auth->user(); // Mevcut kullanıcı $auth->isAdmin(); // Admin mi? $auth->isMod(); // Moderatör mü? ━━━━━━━━━━ GÜVENLİK ÖZELLİKLERİ ━━━━━━━━━━ 1. Argon2ID Şifre Hashleme PHP 7.2+ ile gelen PASSWORD_ARGON2ID algoritması kullanılıyor. bcrypt'ten daha güçlü, GPU saldırılarına karşı dirençli. Eski hash'ler giriş sırasında otomatik yeniden hashleniyor. 2. Brute-force Koruması Aynı IP'den belirli sayıda başarısız denemeden sonra hesap geçici olarak kilitleniyor. Varsayılan: 5 deneme → 15 dakika kilit. config.php'den ayarlanabilir. Kod:
define('MAX_LOGIN_ATTEMPTS', 5); // Maksimum başarısız deneme
define('LOCKOUT_TIME', 900); // 15 dakika (saniye cinsinden)
Tek token yerine selector:validator çifti kullanılıyor. Selector veritabanında açık tutulurken validator SHA-256 ile hashleniyor. Token çalınsa bile saldırgan oturumu ele geçiremiyor. Her giriş sonrası token yenileniyor (token rotation). 4. CSRF Koruması Tüm formlarda hash_equals() ile timing-safe CSRF token doğrulaması yapılıyor. 5. Session Hijacking Koruması Oturum başlangıcında User-Agent + Accept-Language + Accept-Encoding'den fingerprint üretiliyor. Farklı bir tarayıcıdan token kullanılmaya çalışılırsa oturum anında sonlandırılıyor. 6. E-posta Doğrulama Kayıt sonrası 64 karakterlik güvenli rastgele token e-postayla gönderiliyor. Token 24 saat geçerli. Doğrulanmamış hesaplarla giriş yapılamıyor. 7. Şifre Sıfırlama Sıfırlama linki 1 saat geçerli, tek kullanımlık. Kullanıldıktan sonra token veritabanından siliniyor. Şifre değişince tüm remember_tokens da siliniyor (tüm cihazlardan çıkış). 8. Güvenli E-posta Yanıtı "Bu e-posta kayıtlı değil" gibi bilgi sızdıran mesajlar yok. Şifre sıfırlamada her zaman aynı mesaj gösteriliyor. ━━━━━━━━━━ DOSYA YAPISI ━━━━━━━━━━ Kod:
sitem.com/ ├── config/ │ ├── db.php ← PDO bağlantısı │ └── config.php ← Site ayarları, token süreleri, şifre politikası ├── includes/ │ └── Auth.php ← Merkezi auth sınıfı ├── templates/ │ ├── head_styles.php ← Paylaşılan CSS │ └── foot_scripts.php ← Paylaşılan JS ├── register.php ← Kayıt sayfası ├── login.php ← Giriş sayfası ├── verify.php ← E-posta doğrulama ├── forgot-password.php ← Şifre sıfırlama isteği ├── reset-password.php ← Yeni şifre belirleme ├── logout.php ← Çıkış └── auth_kurulum.sql ← Veritabanı kurulum scripti ━━━━━━━━━━ VERİTABANI TABLOLARI ━━━━━━━━━━ SQL kurulum dosyası ekte. 3 tablo oluşturuluyor: Kod:
-- Kullanıcılar (kayıt, doğrulama, sıfırlama alanları dahil)
users (id, username, email, password_hash, is_verified,
verify_token, verify_expires, reset_token, reset_expires,
role, is_banned, points, last_login, last_ip, created_at)
-- Beni hatırla token'ları (selector + hash ikili sistem)
remember_tokens (id, user_id, selector, token_hash, expires)
-- Brute-force login log
login_attempts (id, ip, attempted_at)
━━━━━━━━━━ KURULUM ━━━━━━━━━━ 1. SQL'i çalıştır auth_kurulum.sql dosyasını phpMyAdmin'e import et. 3 tablo otomatik oluşur. 2. db.php'yi doldur config/db.php içindeki DB_HOST / DB_NAME / DB_USER / DB_PASS değerlerini kendi sunucuna göre düzenle. 3. config.php'yi ayarla Kod:
define('SITE_NAME', 'SitemAdı');
define('SITE_URL', 'https://sitem.com'); // E-posta linklerinde kullanılır
define('SITE_EMAIL', 'noreply@sitem.com');
Tüm dosyaları sunucuna yükle. register.php'ye girerek test kaydı yap, e-posta doğrulama linkine tıkla, ardından login.php'den giriş yap. 5. Kendi projenle entegrasyon Herhangi bir sayfada oturumu kontrol etmek için: Kod:
<?php
session_start();
require_once 'config/db.php';
require_once 'config/config.php';
require_once 'includes/Auth.php';
$auth = new Auth($db);
if (!$auth->isLoggedIn()) {
header('Location: login.php');
exit;
}
$user = $auth->user(); // Mevcut kullanıcı bilgileri
echo 'Merhaba, ' . $user['username'];
?>
━━━━━━━━━━ AYARLANABILIR PARAMETRELER ━━━━━━━━━━ config.php dosyasından değiştirilebilen tüm ayarlar:
━━━━━━━━━━ ÖNEMLİ NOTLAR ━━━━━━━━━━
━━━━━━━━━━ GEREKSİNİMLER ━━━━━━━━━━
━━━━━━━━━━ EKLER ━━━━━━━━━━
Test ortamı: PHP 8.2 / MariaDB 10.6. PHP 7.4 altında named arguments (type: 'video') çalışmaz, o durumda sıraya göre argüman geçin. Argon2ID için sunucunuzda libargon2 kurulu olmalıdır — phpinfo() çıktısında "argon2i" görünüyorsa desteklenmektedir. Benzer Konular:
![]() Fallen code. Broken systems. No mercy. |
| Yer İmleri |
| Konuyu 1 kişi okuyor: (0 üye ve 1 misafir) | |
|
|
| Forum | Bilgilendirme | Künye |
|
Powered by vBulletin® Version 3.8.11 Copyright ©2000 - 2026, vBulletin Solutions Inc. Forum Sahibi: Dea Dia ve Gece |
Sitemiz; yer sağlayıcı bir forum sitesidir. Forumel.Com adresimizde yapılan paylaşımlar, moderasyon ekibimizin onayına dahil olmadan direkt olarak yayınlanmaktadır. 5237 sayılı TCK (Türk Ceza Kanunu) ve 5651 Sayılı Kanun'un ilgili maddelerini ihlal eden kişilerin IP adresleri de dahil olmak üzere sair kişi veya adli mercilere müzekkere (Resmi Üst Yazı), tarafımıza tanzim edildiği takdirde paylaşılacaktır. Hukuka aykırı bir paylaşımın olduğunu düşündüğünüz mesaj ya da konuyu; İLETİŞİM linkine bildirim yoluyla iletebilirsiniz. 48 saat içerisinde mevcut şikâyetiniz üzerinden tarafınıza ulaşılacak, gerekli işlemler tesis edilecektir. |
|