PHP ile Kullanıcı Yetkilendirme ve Güvenlik İpuçları

PHP ile Kullanıcı Yetkilendirme ve Güvenlik İpuçları

Web uygulamalarında kullanıcı yetkilendirme, güvenlik ve kullanıcı deneyimi açısından kritik bir rol oynar. Özellikle çok kullanıcılı sistemlerde, her kullanıcının erişebileceği sayfalar ve yapabileceği işlemler farklı olabilir. Bu yazıda, PHP ile nasıl etkili bir yetki yönetimi sistemi oluşturabileceğinizi adım adım örneklerle anlatacağız. Ayrıca, bu sistemi nasıl global hale getirebileceğinizi ve güvenliğini nasıl sağlayacağınızı öğreneceksiniz.


1. Neden Yetki Yönetimi?


Yetki yönetimi, kullanıcıların sistemde yapabileceklerini sınırlandırmak ve güvenliği artırmak için kullanılır. Örneğin:



  • Adminler, tüm kullanıcıları yönetebilir.

  • Editörler, blog yazıları ekleyebilir veya düzenleyebilir.

  • Ziyaretçiler, sadece blogları okuyabilir.


Eğer yetki yönetimi doğru şekilde uygulanmazsa, yetkisi olmayan kullanıcılar kritik işlemleri gerçekleştirebilir ve bu durum güvenlik açıklarına neden olabilir.


2. Temel Yetki Yönetimi Nasıl Yapılır?


Yetki yönetimi için genellikle veritabanında kullanıcı yetkileri saklanır. Bu yetkiler, kullanıcının hangi işlemleri yapabileceğini belirler. Örneğin, yetkileri virgülle ayrılmış bir string olarak saklayabilirsiniz: 1,2,4,6.


Veritabanı Tablosu Örneği:



CREATE TABLE kullanicilar (
id INT PRIMARY KEY AUTO_INCREMENT,
kullanici_adi VARCHAR(50) NOT NULL,
yetkiler VARCHAR(255) -- Yetkileri virgülle ayrılmış şekilde saklar (örnek: "1,2,4")
);


3. Yetki Kontrol Fonksiyonu


Yetki kontrolü için bir global fonksiyon yazalım. Bu fonksiyon, kullanıcının belirli bir yetkiye sahip olup olmadığını kontrol edecek.


Global Yetki Kontrol Fonksiyonu:



function yetkiKontrol($kullanici_id, $gerekli_yetki) {
global $db; // Veritabanı bağlantısını global olarak kullan

// Kullanıcının yetkilerini veritabanından al
$query = $db->prepare("SELECT yetkiler FROM kullanicilar WHERE id = ?");
$query->execute([$kullanici_id]);
$yetkiler = $query->fetchColumn();

// Yetkileri diziye çevir
$yetki_listesi = explode(",", $yetkiler);

// Gerekli yetki listede var mı?
return in_array($gerekli_yetki, $yetki_listesi);
}


4. Yetki Yönetimi Uygulaması


Bu fonksiyonu kullanarak, farklı sayfa ve işlemlerde yetki kontrolü yapabilirsiniz.


Örnek 1: Blog Yazma Sayfası



<?php
session_start();
require_once 'yetki_fonksiyonu.php'; // Global yetki fonksiyonunu dahil et

$kullanici_id = $_SESSION['kullanici_id']; // Oturumdan kullanıcı ID'sini al

// Blog yazma yetkisi kontrolü (yetki ID: 2)
if (yetkiKontrol($kullanici_id, 2)) {
echo "Blog yazma sayfası yükleniyor...";
// Blog yazma işlemleri
} else {
echo "Bu işlem için yetkiniz yok!";
}
?>


Örnek 2: Üye Düzenleme Sayfası



<?php
session_start();
require_once 'yetki_fonksiyonu.php'; // Global yetki fonksiyonunu dahil et

$kullanici_id = $_SESSION['kullanici_id']; // Oturumdan kullanıcı ID'sini al

// Üye düzenleme yetkisi kontrolü (yetki ID: 5)
if (yetkiKontrol($kullanici_id, 5)) {
echo "Üye düzenleme sayfası yükleniyor...";
// Üye düzenleme işlemleri
} else {
echo "Bu işlem için yetkiniz yok!";
}
?>


5. Yetkiye Göre Gizli Alanlar


Eğer bir sayfada yetkiye göre belirli alanları gizlemek istiyorsanız, fonksiyonu bu şekilde kullanabilirsiniz.


Örnek: Blog Görüntüleme Sayfası



<?php
session_start();
require_once 'yetki_fonksiyonu.php'; // Global yetki fonksiyonunu dahil et

$kullanici_id = $_SESSION['kullanici_id']; // Oturumdan kullanıcı ID'sini al

// Blog görüntüleme yetkisi kontrolü (yetki ID: 1)
if (yetkiKontrol($kullanici_id, 1)) {
echo "<h1>Bloglar</h1>";
// Blog listesi
} else {
echo "<p>Bu sayfayı görüntüleme yetkiniz yok!</p>";
}

// Blog yazma yetkisi kontrolü (yetki ID: 2)
if (yetkiKontrol($kullanici_id, 2)) {
echo "<a href='blog_yaz.php'>Yeni Blog Yaz</a>";
}
?>


6. Tüm Sayfalarda Otomatik Yetki Kontrolü


Eğer tüm sayfalarda otomatik olarak yetki kontrolü yapmak istiyorsanız, her sayfanın başına aşağıdaki kodu ekleyebilirsiniz:



<?php
session_start();
require_once 'yetki_fonksiyonu.php'; // Global yetki fonksiyonunu dahil et

$kullanici_id = $_SESSION['kullanici_id']; // Oturumdan kullanıcı ID'sini al

// Örnek: Blog yazma sayfası için yetki kontrolü
if (!yetkiKontrol($kullanici_id, 2)) {
header("Location: yetkisiz_erisim.php"); // Yetkisiz erişim sayfasına yönlendir
exit();
}
?>


7. Güvenlik İpuçları



  • SQL Injection: Veritabanı sorgularında PDO veya mysqli kullanarak SQL injection saldırılarına karşı korunun.

  • Session Güvenliği: Oturum bilgilerini güvende tutmak için session_regenerate_id() kullanın.

  • Yetki Escalation: Kullanıcıların yetkilerini kendi kendilerine artırmalarını engelleyin.


PHP ile yetki yönetimi, web uygulamalarınızın güvenliğini artırmak ve kullanıcı deneyimini iyileştirmek için kritik bir adımdır. Bu yazıda, global bir yetki kontrol fonksiyonu oluşturmayı ve bu fonksiyonu farklı senaryolarda nasıl kullanacağınızı öğrendiniz. Bu yapıyı kullanarak, kullanıcılarınızın yetkilerini kolayca yönetebilir ve güvenli bir sistem oluşturabilirsiniz.

Banner

Arama Yap

Hakkımızda

CR Medya, tek bir amaçla kurulmuş yaratıcı bir ajansdır: Markanızı tanımlamanıza yardımcı olmak. Güzel ve kullanıcı dostu bir tasarımı kaliteli programlamayla birleştirerek kusursuz bir hizmet sunuyoruz.

Devamını Oku

Banner

Banner

Neler yapıyoruz?