PHP PDO (PHP Data Objects), veritabanlarına erişmek için kullanılan bir arayüzdür. PDO, farklı veritabanı türleriyle uyumlu olduğu için uygulamanızın daha taşınabilir ve genişletilebilir olmasını sağlar. İşte PHP'de PDO kullanarak bazı örnekler:
$host = 'localhost';
$dbname = 'database_name';
$username = 'username';
$password = 'password';
try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); // Veritabanına başarıyla bağlandı
} catch (PDOException $e) { echo "Bağlantı hatası: " . $e->getMessage(); }
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// $user, veritabanından alınan kullanıcı verilerini içeren bir dizi
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(['John Doe', '[email protected]']);
// Yeni kullanıcı verisi veritabanına eklendi
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("UPDATE users SET email = ? WHERE id = ?");
$stmt->execute(['[email protected]', 1]);
// Kullanıcının e-posta adresi güncellendi
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([1]);
// Kullanıcı verisi veritabanından silindi
Bu örnekler, PHP'de PDO ile veritabanı işlemlerinin nasıl yapılabileceği konusunda size bir fikir verebilir. Daha fazla bilgi için PHP PDO belgelerine başvurabilirsiniz.
İşte PHP'de güvenlik konusunda dikkat edilmesi gereken bazı önemli noktalar:
PDO kullanarak veritabanı işlemleri yaparken hazırlıklı sorgular kullanmak, güvenlik açıklarını önlemeye yardımcı olur. Hazırlıklı sorgular, değişkenlerin yerlerine sorguya eklenmeden önce önceden hazırlanmış bir sorgudur. Bu sayede, kötü niyetli kullanıcıların sorgulara zararlı veriler göndermeleri engellenir.
Örneğin, aşağıdaki sorgu hazırlıklı değildir ve güvenlik açığına neden olabilir:
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
Bu sorguda, $id değişkeni doğrudan sorguya eklenir ve kullanıcının $id değişkenine zararlı veriler göndermesi durumunda sorgu çalıştığında güvenlik açıkları oluşabilir. Bu nedenle, hazırlıklı sorgular kullanmak daha güvenlidir:
$id = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
Bu sorguda, $id değişkeni sorgudan önce hazırlanmış bir sorguda yerine eklenir, böylece kullanıcının sorguya zararlı veriler göndermesi durumunda sorgu çalışmaz.
Kullanıcılardan gelen verileri doğrulamak, kötü niyetli kullanıcıların uygulamanızdaki güvenlik açıklarından yararlanmalarını önleyebilir. Kullanıcıların gönderdikleri verileri doğrulamak için PHP'de bazı hazır işlevler bulunmaktadır. Örneğin, is_numeric() işlevi, bir değişkenin sayısal olup olmadığını doğrular.
if (is_numeric($_POST['age'])) { // yaş, sayısal bir değerdir
} else { // yaş, sayısal bir değer değildir
}
Güvenlik duvarı, uygulamanıza gelen istekleri izleyerek zararlı istekleri engeller. Güvenlik duvarı kullanarak, kötü niyetli kullanıcıların uygulamanıza erişmelerini ve zararlı istekler göndermelerini önleyebilirsiniz. Güvenlik duvarı yazmak yerine, hazır olarak kullanabileceğiniz PHP kütüphaneleri de mevcuttur.
Uygulamanızda oluşabilecek güvenlik açıklarını düzenli olarak taramak, uygulamanızdaki güvenlik sorunlarını tespit edebilmeniz için önemlidir. Güvenlik açıkları, uygulamanızdaki değişkenlerin kullanıcı tarafından kontrol edilebildiği yerlerde ortaya çıkabilir. Bu nedenle, uygulamanızı taramak için bazı özel araçlar kullanabilirsiniz.
Örneğin, OWASP (Open Web Application Security Project) tarafından geliştirilen ve PHP uygulamalarının güvenliğini test etmek için kullanılan OWASP ZAP (Zed Attack Proxy) aracını kullanabilirsiniz. OWASP ZAP, uygulamanızda potansiyel güvenlik açıklarını tespit edebilen açık kaynak bir araçtır.
Kullanıcıların parolalarını şifrelemek, uygulamanızdaki güvenliği artırır. Parolaları şifrelemek için, PHP'de password_hash() işlevini kullanabilirsiniz. Bu işlev, kullanıcının parolasını şifreler ve şifrelenmiş parolayı veritabanında saklar. Kullanıcının oturum açmak istediği zaman, parolanın şifrelenmiş sürümü veritabanındaki şifrelenmiş sürümle karşılaştırılır.
$password = 'mypassword';
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
Bu işlev, $password değişkenindeki parolayı şifreler ve $hashed_password değişkeninde şifrelenmiş sürümünü saklar. Şifrelenmiş sürümü doğrulamak için ise password_verify() işlevini kullanabilirsiniz.
$password = 'mypassword';
$hashed_password = '...'; // veritabanından alınan şifrelenmiş sürüm
if (password_verify($password, $hashed_password)) { // parola doğru
} else { // parola yanlış
}
Bu örnekler, PHP'de güvenlik konusunda bazı temel önlemleri içerir. Ancak, güvenlik çok geniş bir konudur ve daha fazla bilgiye ihtiyacınız varsa, PHP'nin güvenlikle ilgili belgelerine veya çeşitli PHP güvenlik kütüphanelerine başvurabilirsiniz.