Forumel.Com

Geri Git   Forumel.Com > Webmaster > Webmaster Forum > Web Programlama

Web Programlama Bir web programlama dili ve veritabanı ile dinamik içerikli web siteleri yapmayı amaçlar.


[PHP] Kullanıcı Kayıt, Giriş ve Güvenli Auth Sistemi - 2026 Güncel (Token + Email Doğrulama)

Bir web programlama dili ve veritabanı ile dinamik içerikli web siteleri yapmayı amaçlar.



Konu Bilgileri
Konu Başlığı
[PHP] Kullanıcı Kayıt, Giriş ve Güvenli Auth Sistemi - 2026 Güncel (Token + Email Doğrulama)
Konudaki Cevap Sayısı
0
Şuan Bu Konuyu Görüntüleyenler
 
Görüntülenme Sayısı
60

Kullanıcı Etiket Listesi

1Beğeniler
  • 1 Post By DEKO

  
 
LinkBack Seçenekler Stil
Eski 23 Nisan 2026, 23:17   #1
Çevrimdışı
DEKO
DEKO - ait Kullanıcı Resmi (Avatar)
Üyelerin profil bilgilerini yalnızca kayıtlı üyeler görüntüleyebilir. Lütfen kaydol bağlantısından üye olunuz.
yazı [PHP] Kullanıcı Kayıt, Giriş ve Güvenli Auth Sistemi - 2026 Güncel (Token + Email Doğrulama)

[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)
3. Beni Hatırla — Selector+Validator İkili Sistem
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');
4. Dosyaları yükle ve test et
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:
  • EMAIL_TOKEN_TTL → 86400 (24 saat) — E-posta doğrulama linki geçerlilik süresi
  • RESET_TOKEN_TTL → 3600 (1 saat) — Şifre sıfırlama linki geçerlilik süresi
  • SESSION_TTL → 604800 (7 gün) — Aktif oturum zaman aşımı
  • REMEMBER_COOKIE_TTL → 2592000 (30 gün) — Beni hatırla çerezi süresi
  • MAX_LOGIN_ATTEMPTS → 5 — Brute-force kilit eşiği
  • LOCKOUT_TIME → 900 (15 dk) — Kilit süresi
  • MIN_PASSWORD_LENGTH → 8 — Minimum şifre uzunluğu
  • REQUIRE_UPPERCASE → true — Büyük harf zorunluluğu
  • REQUIRE_NUMBER → true — Rakam zorunluluğu

━━━━━━━━━━ ÖNEMLİ NOTLAR ━━━━━━━━━━
  • SMTP desteği: Varsayılan olarak PHP'nin mail() fonksiyonu kullanılıyor. Gmail veya başka bir SMTP kullanmak için config.php'de MAIL_USE_SMTP = true yapın ve PHPMailer entegre edin.
  • Cloudflare uyumu: IP tespitinde HTTP_CF_CONNECTING_IP başlığı öncelikli kontrol ediliyor. Cloudflare arkasındaki sitelerde doğru IP alınır.
  • Cron önerisi: auth_kurulum.sql sonundaki yorum satırlarında eski login_attempts ve süresi dolmuş token'ları temizlemek için günlük cron sorguları var.
  • Şifre politikası: config.php'den REQUIRE_UPPERCASE ve REQUIRE_NUMBER kapatılabilir. Kayıt formundaki canlı doğrulama göstergesi otomatik olarak uyum sağlar.

━━━━━━━━━━ GEREKSİNİMLER ━━━━━━━━━━
  • PHP 7.4 veya üzeri (Argon2ID için PHP 7.2+, arrow function için 7.4+)
  • PDO + PDO_MySQL extension
  • MySQL 5.7 / MariaDB 10.3 veya üzeri
  • E-posta göndermek için: mail() aktif veya SMTP erişimi

━━━━━━━━━━ EKLER ━━━━━━━━━━
  1. Auth.php — Merkezi auth sınıfı. register, login, logout, verifyEmail, resetPassword, check, user metodları.
  2. register.php — Kayıt formu. Canlı şifre kuralı göstergesi dahil.
  3. login.php — Giriş formu. Beni hatırla, e-posta veya kullanıcı adıyla giriş.
  4. verify.php — E-posta doğrulama sayfası.
  5. forgot-password.php — Şifre sıfırlama isteği.
  6. reset-password.php — Yeni şifre belirleme.
  7. logout.php — Güvenli çıkış (cookie + session temizleme).
  8. config/db.php — PDO bağlantısı.
  9. config/config.php — Tüm ayarlar tek yerden.
  10. auth_kurulum.sql — 3 tablo SQL scripti.
  11. auth_banner.png — Konu başlık görseli.



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.

Eklenmiş Dosya
Dosya tipi: zip auth_system_full.zip (58.9 KB, 0x kez indirilmiştir)

Fallen code. Broken systems. No mercy.
 

Yer İmleri


Konuyu 1 kişi okuyor: (0 üye ve 1 misafir)
 

Gönderim Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Ek dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
İfadeler Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık



Tüm saatler GMT +3 biçimindedir. Şu anki saat 15:12.

Forum Bilgilendirme Künye
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.

Forumel, lisanslı vBulletin kullanmaktadır!
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.

Eğlenceli Genel Forum Sitesi, Genel Forum Sitesi, Genel Forum Siteleri, Genel Forum