Php 8 Uygulama: Formlar

Php 8 Uygulama: Formlar

PHP 8 ile form işlemleri, kullanıcı girdilerini alarak bunları işlemek, doğrulamak ve sunucuya iletmek gibi işlemleri içerir. PHP, form verilerini alıp işlemek için $_GET, $_POST, ve $_REQUEST gibi süper global değişkenler sağlar. Aşağıda PHP 8’de form kullanımı ve temel güvenlik önlemleriyle ilgili bir rehber sunulmuştur.

1. Form Oluşturma (HTML Kısmı)

Öncelikle bir HTML formu oluşturarak kullanıcıdan veri alalım. Örneğin, bir kullanıcı adı ve şifre girişi alalım.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login Form</title> </head> <body> <form action="process.php" method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br> <input type="submit" value="Submit"> </form> </body> </html>

2. Form Verilerinin İşlenmesi (PHP Kısmı)

Form gönderildikten sonra verileri process.php dosyasında işlemeye başlayabiliriz. PHP'de form verileri $_POST (formun method="POST" ise) veya $_GET ile alınır.

<?php // process.php if ($_SERVER["REQUEST_METHOD"] == "POST") { // Formdan gelen verileri alma $username = $_POST['username']; $password = $_POST['password']; // Basit veri doğrulama if (empty($username) || empty($password)) { echo "Kullanıcı adı ve şifre gereklidir."; } else { echo "Hoş geldiniz, " . htmlspecialchars($username) . "!"; } }

3. Güvenlik Önlemleri

a. htmlspecialchars() ile XSS Koruması

Formdan gelen verilerin doğrudan çıktıya yazılması, XSS (Cross-Site Scripting) saldırılarına yol açabilir. Bu tür saldırılara karşı korunmak için kullanıcı girdileri her zaman htmlspecialchars() fonksiyonu ile temizlenmelidir.

echo "Hoş geldiniz, " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . "!";

b. filter_var() ile Girdi Doğrulama

PHP, kullanıcı girdilerini doğrulamak için filter_var() fonksiyonunu sağlar. Örneğin, bir e-posta doğrulaması şu şekilde yapılabilir:

$email = $_POST['email']; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Geçersiz e-posta adresi!"; } else { echo "E-posta doğru: " . htmlspecialchars($email); }

c. SQL Injection'a Karşı Hazırlıklı İfadeler (Prepared Statements)

Eğer form verileri bir veritabanına gönderilecekse, SQL injection riskini önlemek için PDO ile prepared statements (hazırlıklı ifadeler) kullanılmalıdır.

// Veritabanı bağlantısı (PDO) $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password'); // Hazırlıklı ifade $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password'); // Form verilerini güvenli şekilde bağlama $stmt->execute(['username' => $username, 'password' => $password]); // Sonuçları alma $user = $stmt->fetch(); if ($user) { echo "Giriş başarılı!"; } else { echo "Geçersiz kullanıcı adı veya şifre!"; }

d. CSRF (Cross-Site Request Forgery) Koruması

CSRF, kullanıcı adına sahte istekler yapılmasına izin veren bir saldırı türüdür. Bunu önlemek için form içinde bir CSRF token kullanabiliriz.

// CSRF token oluşturma ve session'a kaydetme session_start(); $csrf_token = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $csrf_token; ?> <!-- Formun içine CSRF token ekleme --> <form action="process.php" method="POST"> <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>"> <!-- Diğer form alanları --> </form>

Token doğrulaması ise form gönderildiğinde yapılır:

// CSRF token doğrulama session_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die('CSRF doğrulaması başarısız!'); }

4. Form Doğrulama ve Hata Mesajları

Kullanıcı hatalarını yakalamak ve düzgün bir kullanıcı deneyimi sunmak için doğrulama işlemlerini genişletebiliriz:

if (empty($username)) { echo "Kullanıcı adı boş bırakılamaz."; } elseif (strlen($username) < 5) { echo "Kullanıcı adı en az 5 karakter olmalıdır."; } else { // Girdiler geçerli, işleme devam et echo "Hoş geldiniz, " . htmlspecialchars($username); }

5. Dosya Yükleme Formu

PHP ile dosya yükleme işlemleri de form kullanılarak yapılır. Formda enctype="multipart/form-data" kullanarak dosya yükleme formu oluşturabiliriz.

<form action="upload.php" method="POST" enctype="multipart/form-data"> <label for="file">Dosya Yükleyin:</label> <input type="file" name="file" id="file"> <br> <input type="submit" value="Yükle"> </form>

PHP tarafında dosya yükleme:

// upload.php if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { $uploadDir = 'uploads/'; $uploadFile = $uploadDir . basename($_FILES['file']['name']); if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) { echo "Dosya başarıyla yüklendi!"; } else { echo "Dosya yükleme sırasında bir hata oluştu."; } } else { echo "Dosya yüklenemedi. Hata kodu: " . $_FILES['file']['error']; }

Sonuç

PHP 8 ile form işlemleri kolayca yapılabilir ve güvenlik önlemleri alındığında hem kullanıcılar hem de sunucu koruma altında olur. Formlardan alınan verilerin doğrulanması, temizlenmesi ve güvenli bir şekilde işlenmesi, web uygulamalarının güvenliğini artırır.



Yorum Ekle

Üzerine gel