
PHP Güvenliği
Güvenlik, PHP geliştirmenin en önemli parçalarından biridir. Bir PHP uygulaması işlevsel açıdan doğru şekilde çalışabilir ancak kullanıcı girişini, veritabanı sorgularını, oturumları, dosyaları ve parolaları güvenli bir şekilde işleyemezse saldırılara karşı savunmasız hale gelebilir.
PHP, oturum açma sistemleri, gösterge tabloları, yönetici panelleri, APIs, bloglar, e-ticaret sistemleri ve içerik yönetim sistemleri oluşturmak için yaygın olarak kullanılır. Bu uygulamalar genellikle kullanıcılarla, formlarla, veritabanlarıyla, oturumlarla, yüklenen dosyalarla ve hassas bilgilerle ilgilenir.
Bu makalede güvenlik temelleri, giriş doğrulama, çıkıştan kaçış, SQL ekleme, XSS koruması, CSRF koruması, parola karması, oturum güvenliği, file upload güvenliği, hata işleme ve güvenli kodlama uygulamaları dahil olmak üzere önemli PHP güvenlik konuları açıklanmaktadır.
PHP Güvenlik Temelleri
PHP güvenliği basit bir kuralla başlar: Kullanıcı girişine asla güvenmeyin. Kullanıcıdan, tarayıcıdan, URL'den, formdan, tanımlama bilgisinden, başlıktan, API isteğinden, yüklenen dosyadan veya harici hizmetten gelen herhangi bir veri, doğrulanıp güvenli bir şekilde işlenene kadar güvenilmeyen veriler olarak değerlendirilmelidir.
Kullanıcı girişi aşağıdakiler de dahil olmak üzere birçok yerden gelebilir:
$_GET:URL sorgu dizesindeki veriler.
$_POST:gönderilen formlardan veya AJAX isteklerinden elde edilen veriler.
$_COOKIE:Kullanıcının tarayıcısında saklanan veriler.
$_FILES:dosya bilgileri yüklendi.
$_SERVER:istek ve sunucu bilgileri.
JSON istek gövdesi:APIs veya JavaScript uygulamaları tarafından gönderilen veriler.
Güvenli PHP geliştirme genellikle çeşitli uygulamaların birlikte çalışmasına bağlıdır. Girişi doğrularsınız, çıkıştan çıkarsınız, veritabanı sorguları için prepared statements'yu kullanırsınız, parolaları karma hale getirirsiniz, oturumları korursunuz, izinleri kontrol edersiniz, hataları dikkatli bir şekilde ele alırsınız ve hassas bilgilerin açığa çıkmasını önlersiniz.
Güvenlik yalnızca projenin sonuna eklenmemelidir. Başlangıçtan itibaren geliştirme sürecinin bir parçası olmalıdır.
Giriş Doğrulaması
Giriş doğrulama, kullanıcı girişinin kullanılmadan önce kabul edilebilir olup olmadığının kontrol edilmesi anlamına gelir. Doğrulama, uygulamanın yanlış, eksik, beklenmeyen veya tehlikeli verilerden korunmasına yardımcı olur.
Örneğin, bir form bir e-posta adresi isterse uygulama, değerin gerçekten geçerli bir e-posta olup olmadığını kontrol etmelidir. Bir formda yaş sorulursa uygulama, değerin beklenen aralıkta bir sayı olup olmadığını kontrol etmelidir.
<?php
$email = trim($_POST["email"] ?? "");
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Invalid email address.";
}
?>Doğrulama birçok şeyi kontrol edebilir:
Gerekli alanlar.
E-posta biçimi.
URL biçimi.
Minimum ve maksimum uzunluk.
Sayısal değerler.
İzin verilen değerler.
Tarih formatı.
Dosya türü ve dosya boyutu.
Örneğin bir rol alanı herhangi bir rastgele değeri kabul etmemelidir. Yalnızca belirli izin verilen değerleri kabul etmelidir.
<?php
$allowedRoles = ["user", "editor", "admin"];
$role = $_POST["role"] ?? "user";
if (!in_array($role, $allowedRoles, true)) {
echo "Invalid role.";
exit;
}
?>Doğrulama hem güvenliği hem de veri kalitesini artırır. Geçersiz verilerin uygulamaya girmesini engeller ve sistemin öngörülebilir şekilde davranmasına yardımcı olur.
Çıkış Çıkışı
Çıkış kaçışı, kullanıcı tarafından oluşturulan içeriği HTML'da görüntülemeden önce özel karakterleri dönüştürmek anlamına gelir. Bu önemlidir çünkü kullanıcı girişi HTML veya JavaScript kodunu içerebilir.
PHP’de,htmlspecialchars()HTML içindeki metni güvenli bir şekilde görüntülemek için yaygın olarak kullanılır.
<?php
$name = $_POST["name"] ?? "";
echo htmlspecialchars($name, ENT_QUOTES, "UTF-8");
?>Kaçmadan, kullanıcı komut dosyası etiketi gibi bir şey gönderebilir ve tarayıcı bunu JavaScript olarak çalıştırabilir. Kaçışla tarayıcı, onu çalıştırmak yerine normal metin olarak görüntüler.
Küçük bir yardımcı fonksiyon güvenli çıkışı kolaylaştırabilir:
<?php
function e($value) {
return htmlspecialchars($value ?? "", ENT_QUOTES, "UTF-8");
}
echo e($_POST["name"] ?? "");
?>Adlar, yorumlar, makale içeriği, profil bilgileri, arama anahtar sözcükleri ve veritabanı değerleri gibi kullanıcı tarafından oluşturulan veriler görüntülenirken çıktı kaçışı uygulanmalıdır.
Doğrulama ve kaçış farklıdır. Doğrulama, girdinin kabul edilebilir olup olmadığını kontrol eder. Kaçış, verilerin görüntülendiği çıktı bağlamını korur.
SQL Injection
SQL enjeksiyonu, veritabanı odaklı uygulamalardaki en tehlikeli güvenlik açıklarından biridir. Kullanıcı girişi, uygun koruma olmadan doğrudan bir SQL sorgusuna eklendiğinde meydana gelir.
Örneğin, bu kod güvenli değildir:
<?php
$email = $_POST["email"];
$sql = "SELECT * FROM users WHERE email = '$email'";
?>Kötü niyetli bir kullanıcı e-posta alanına özel SQL kodunu gönderirse sorgunun anlamını değiştirebilir. Bu, veri sızıntılarına, yetkisiz oturum açmaya, silinen kayıtlara veya veritabanlarının zarar görmesine neden olabilir.
Doğru yaklaşım prepared statements kullanmaktır. Hazırlanan ifadeler SQL yapısını kullanıcı girişinden ayırır.
<?php
$pdo = new PDO(
"mysql:host=localhost;dbname=app;charset=utf8mb4",
"root",
""
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$email = $_POST["email"] ?? "";
$statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$statement->execute([
"email" => $email
]);
$user = $statement->fetch(PDO::FETCH_ASSOC);
?>SELECT, INSERT, UPDATE ve DELETE sorguları dahil olmak üzere kullanıcı girişi içeren tüm sorgular için hazırlanan ifadeler kullanılmalıdır.
Örneğin, bir güncelleme sorgusu prepared statements'yu da kullanmalıdır:
<?php
$id = $_POST["id"] ?? "";
$name = $_POST["name"] ?? "";
$statement = $pdo->prepare("
UPDATE users
SET name = :name
WHERE id = :id
");
$statement->execute([
"name" => $name,
"id" => $id
]);
?>SQL enjeksiyonunu önleme, her PHP geliştiricisi için en önemli güvenlik alışkanlıklarından biridir.
XSS Koruması
XSS, Siteler Arası Komut Dosyası Çalıştırma anlamına gelir. Bu, bir saldırganın diğer kullanıcılar tarafından görüntülenen bir sayfaya JavaScript eklemeyi başardığında meydana gelir.
Örneğin, bir yorum formu kullanıcıların yorum yazmasına olanak tanıyabilir. Uygulama, yorumları kaçmadan görüntülüyorsa, kötü niyetli bir kullanıcı normal metin yerine JavaScript kodunu gönderebilir.
Güvenli olmayan çıktı:
<?php
echo $_POST["comment"];
?>Güvenli çıktı:
<?php
echo htmlspecialchars($_POST["comment"] ?? "", ENT_QUOTES, "UTF-8");
?>XSS, oturum verilerini çalmak, sayfa içeriğini değiştirmek, kullanıcıları yeniden yönlendirmek veya başka bir kullanıcı adına eylemler gerçekleştirmek için kullanılabilir. Bu nedenle çıktıdan kaçış esastır.
XSS koruması genellikle şunları içerir:
Kullanıcı tarafından oluşturulan çıktıdan kaçış.
Girişi dikkatlice doğrulamak.
Kesinlikle sterilize edilmediği sürece ham HTML'nun kullanıcılardan uzak tutulması.
Oturum koruması için güvenli çerezlerin kullanılması.
Mümkün olduğunda İçerik Güvenliği Politikasını kullanma.
Uygulamanız blog içeriği veya biçimlendirilmiş yorumlar gibi zengin metinlere izin veriyorsa HTML'ya güvenmeyin. Güvenilir bir HTML temizleyiciyi veya güvenli zengin metin işleme için tasarlanmış bir çerçeve özelliğini kullanın.
CSRF Koruması
CSRF, Siteler Arası Talep Sahteciliği anlamına gelir. Bu, bir saldırganın oturum açmış bir kullanıcıyı uygulamanıza istenmeyen bir istek göndermesi için kandırması durumunda gerçekleşir.
Örneğin, bir kullanıcı yönetici panelinde oturum açtıysa, saldırgan kullanıcının tarayıcısının hesap verilerini değiştiren veya içeriği silen gizli bir form göndermesini sağlamaya çalışabilir.
CSRF koruması genellikle bir belirteç kullanır. Sunucu rastgele bir belirteç oluşturur, bunu oturumda saklar ve formun içine ekler. Form gönderildiğinde sunucu, gönderilen belirtecin oturum belirteciyle eşleşip eşleşmediğini kontrol eder.
<?php
session_start();
if (empty($_SESSION["csrf_token"])) {
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
}
?>
<form method="post" action="update-profile.php">
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION["csrf_token"], ENT_QUOTES, "UTF-8"); ?>">
<input type="text" name="name">
<button type="submit">Update</button>
</form>İsteği işlerken belirteci kontrol edin:
<?php
session_start();
$token = $_POST["csrf_token"] ?? "";
if (!hash_equals($_SESSION["csrf_token"] ?? "", $token)) {
http_response_code(403);
echo "Invalid CSRF token.";
exit;
}
echo "Request accepted.";
?>CSRF koruması özellikle veri oluşturan, güncelleyen veya silen formlar için önemlidir. Giriş, çıkış, profil güncelleme, şifre değiştirme, silme butonları ve yönetici işlemleri korunmalıdır.
Şifre Karmalama
Şifreler asla düz metin olarak saklanmamalıdır. Bir veritabanı sızdırılırsa ve şifreler doğrudan saklanırsa tüm kullanıcı hesapları açığa çıkar.
PHP şunları sağlarpassword_hash()şifreleri güvenli bir şekilde karma hale getirmek için.
<?php
$password = $_POST["password"] ?? "";
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash;
?>Oluşturulan karma, orijinal parolanın değil, veritabanında saklanmalıdır.
Kullanıcı oturum açmaya çalıştığında şunu kullanın:password_verify()Gönderilen şifreyi saklanan karma ile karşılaştırmak için.
<?php
$submittedPassword = $_POST["password"] ?? "";
$storedHash = $user["password"];
if (password_verify($submittedPassword, $storedHash)) {
echo "Login successful.";
} else {
echo "Invalid credentials.";
}
?>Parolalar için MD5 veya SHA1 gibi zayıf karma yöntemlerini kullanmayın. Parola karma işlemi, parola depolama için tasarlanmış algoritmalara ihtiyaç duyar.
Minimum uzunluk gibi şifre kurallarının uygulanması ve giriş formlarının hız sınırlama veya geçici kilitlemeler kullanılarak kaba kuvvet saldırılarına karşı korunması da iyi bir uygulamadır.
Oturum Güvenliği
Oturumlar genellikle oturum açma sistemleri ve kullanıcı kontrol panelleri için kullanılır. Oturumlar kimliği doğrulanmış kullanıcıları temsil edebildiğinden dikkatli bir şekilde ele alınmalıdır.
Temel bir oturum açma sistemi, başarılı oturum açma sonrasında kullanıcı kimliğini oturumda saklayabilir.
<?php
session_start();
session_regenerate_id(true);
$_SESSION["user_id"] = $user["id"];
$_SESSION["user_role"] = $user["role"];
?>fonksiyonsession_regenerate_id(true)Giriş yaptıktan sonra yeni bir oturum kimliği oluşturarak oturum sabitlenmesine karşı korunmaya yardımcı olur.
Bir kullanıcının oturum açıp açmadığını kontrol etmek için:
<?php
session_start();
if (empty($_SESSION["user_id"])) {
header("Location: login.php");
exit;
}
?>Oturumu kapatmak için oturum verilerini temizleyin ve oturumu yok edin.
<?php
session_start();
$_SESSION = [];
session_destroy();
header("Location: login.php");
exit;
?>Önemli oturum güvenliği uygulamaları şunları içerir:
Oturum açtıktan sonra oturum kimliğini yeniden oluşturun.
Parolaları oturumda saklamayın.
Üretimde HTTPS kullanın.
Mümkün olduğunda güvenli çerez seçeneklerini ayarlayın.
Oturum kapatma sırasında oturumları yok edin.
Korunan sayfalardaki izinleri kontrol edin.
Çerez Güvenliği
Çerezler kullanıcının tarayıcısında saklanır, bu nedenle düz şifreler, özel belirteçler veya gizli kullanıcı verileri gibi hassas bilgiler içermemelidirler.
Çerezleri ayarlarken PHP güvenlikle ilgili seçeneklere izin verir.
<?php
setcookie("theme", "dark", [
"expires" => time() + 3600,
"path" => "/",
"secure" => true,
"httponly" => true,
"samesite" => "Lax"
]);
?>güvenliseçeneği, çerezin yalnızca HTTPS üzerinden gönderilmesi gerektiği anlamına gelir.yalnızca httpseçeneği JavaScript'nun çerezi okumasını engeller.aynı siteseçeneği belirli siteler arası istek risklerini azaltmaya yardımcı olur.
Çerezler tercihler ve hassas olmayan veriler için faydalıdır ancak kimlik doğrulama, güvenli oturum ve belirteç uygulamaları kullanılarak dikkatli bir şekilde tasarlanmalıdır.
File Upload Güvenliği
Kullanıcılar sunucunuza dosya gönderdiğinden dosya yüklemeleri riskli olabilir. Yüklemeler doğru şekilde doğrulanmazsa saldırganlar tehlikeli dosyalar yükleyebilir veya mevcut dosyaların üzerine yazabilir.
Güvenli bir yükleme sistemi, dosya boyutunu, uzantısını, MIME türünü, yükleme hatalarını ve dosya adını doğrulamalıdır. Ayrıca yüklenen dosyaları kontrollü bir dizinde saklamalıdır.
<?php
$allowedExtensions = ["jpg", "jpeg", "png", "pdf"];
$maxSize = 2 * 1024 * 1024;
if ($_FILES["file"]["error"] !== UPLOAD_ERR_OK) {
echo "Upload error.";
exit;
}
$fileName = $_FILES["file"]["name"];
$tmpName = $_FILES["file"]["tmp_name"];
$fileSize = $_FILES["file"]["size"];
$extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
if (!in_array($extension, $allowedExtensions, true)) {
echo "File type is not allowed.";
exit;
}
if ($fileSize > $maxSize) {
echo "File is too large.";
exit;
}
$newName = bin2hex(random_bytes(16)) . "." . $extension;
move_uploaded_file($tmpName, __DIR__ . "/uploads/" . $newName);
echo "File uploaded safely.";
?>Orijinal dosya adına güvenmeyin. Bunun yerine yeni bir güvenli ad oluşturun. Bu, dosyaların üzerine yazılmasını önlemeye yardımcı olur ve özel karakterlerden kaynaklanan riskleri azaltır.
Daha iyi koruma için, yüklenen dosyalar PHP komut dosyalarının yürütülebileceği bir dizine yerleştirilmemelidir. Mümkünse, yüklemeleri genel web kökünün dışında saklayın ve bunları kontrollü indirme mantığı aracılığıyla sunun.
Yetkilendirme ve Kullanıcı Rolleri
Kimlik doğrulama şu soruyu yanıtlar: Kullanıcı kimdir? Yetkilendirme şu soruyu yanıtlar: Kullanıcının ne yapmasına izin verilir?
Bir kullanıcı oturum açmış olabilir ancak bu, onun her sayfaya erişmesi veya her eylemi gerçekleştirmesi gerektiği anlamına gelmez. Örneğin, kullanıcıları yalnızca yöneticiler silmeli ve kullanıcı daha yüksek izinlere sahip olmadığı sürece yalnızca gönderinin sahibi bu gönderiyi düzenlemelidir.
<?php
session_start();
if (($_SESSION["user_role"] ?? "") !== "admin") {
http_response_code(403);
echo "Access denied.";
exit;
}
echo "Welcome to admin area.";
?>Sahiplik kontrolleri için oturum açmış kullanıcı kimliğini kaynağın sahip kimliğiyle karşılaştırın.
<?php
if ($post["user_id"] !== $_SESSION["user_id"]) {
http_response_code(403);
echo "You cannot edit this post.";
exit;
}
?>Yetkilendirme her zaman sunucu tarafında kontrol edilmelidir. HTML veya JavaScript'da bir düğmeyi gizlemek yeterli değildir çünkü kullanıcılar istekleri manuel olarak göndermeye devam edebilir.
Hata İşleme ve Hata Ayıklama Modu
Hata mesajları geliştirme sırasında faydalıdır ancak üretim sırasında hassas bilgilerin açığa çıkmasına neden olabilir. Veritabanı kimlik bilgileri, dosya yolları, SQL sorguları ve yığın izlemeleri genel kullanıcılara gösterilmemelidir.
Geliştirme sırasında hataların görüntülenmesi hata ayıklamaya yardımcı olabilir:
<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>Üretimde hatalar genellikle görüntülenmek yerine günlüğe kaydedilmelidir:
<?php
ini_set("display_errors", "0");
ini_set("log_errors", "1");
error_reporting(E_ALL);
?>Bir şeyler başarısız olduğunda kullanıcıya güvenli bir mesaj gösterin ve teknik ayrıntıları özel olarak günlüğe kaydedin.
<?php
try {
// Database or application logic
} catch (Exception $exception) {
error_log($exception->getMessage());
echo "Something went wrong. Please try again later.";
}
?>Bu yaklaşım, hassas sistem ayrıntılarını korurken geliştiricilerin hataları günlükler aracılığıyla araştırmasına da olanak tanır.
Güvenli Veritabanı Uygulamaları
Veritabanı güvenliği yalnızca prepared statements ile ilgili değildir. Ayrıca izinleri, yedeklemeleri, hata yönetimini ve gereksiz erişimin önlenmesini de içerir.
Önemli veritabanı güvenliği uygulamaları şunları içerir:
Tüm kullanıcı girişi için prepared statements kullanın.
Sınırlı izinlere sahip bir veritabanı kullanıcısı kullanın.
Veritabanı kimlik bilgilerini kamuya açık etmeyin.
Kimlik bilgilerini yapılandırma veya ortam dosyalarında saklayın.
Ham veritabanı hatalarını kullanıcılara göstermeyin.
Önemli veritabanlarını düzenli olarak yedekleyin.
Verileri kaydetmeden önce doğrulayın.
Örneğin, web sitesi tarafından kullanılan veritabanı kullanıcısının her zaman tam yönetim izinlerine ihtiyacı olmamalıdır. Üretimde yalnızca uygulamanın gerçekten ihtiyaç duyduğu izinleri vermek daha güvenlidir.
Güvenli PHP Yapılandırması
Bazı güvenlik uygulamaları sunucu ve PHP yapılandırmasıyla ilgilidir. Güvenli bir uygulama, güvenli olmayan yapılandırma nedeniyle yine de zayıflatılabilir.
Önemli yapılandırma uygulamaları şunları içerir:
PHP’yi güncel tutun.
Üretimdeki hataların görüntülenmesini devre dışı bırakın.
Üretim web siteleri için HTTPS kullanın.
Doğru dosya ve dizin izinlerini ayarlayın.
Git depolarına sır göndermeyin.
Ortam dosyalarını genel erişime karşı koruyun.
Yükleme boyutunu uygulama ihtiyaçlarına göre sınırlayın.
Kullanılmayan dosyaları, test komut dosyalarını ve eski yedeklemeleri genel dizinlerden kaldırın.
Güvenlik yalnızca koddan ibaret değildir. Aynı zamanda dağıtım, yapılandırma, güncellemeler, izinler ve izlemedir.
PHP Projeleri için Güvenlik Kontrol Listesi
Pratik bir PHP güvenlik kontrol listesi, geliştiricilerin dağıtımdan önce uygulamalarını incelemesine yardımcı olabilir.
Formlardan, URL'lerden, çerezlerden, APIs ve dosyalardan gelen tüm girişleri doğrulayın.
Çıkış bağlamı için doğru yöntemi kullanarak kullanıcı tarafından oluşturulan tüm çıktılardan çıkın.
Veritabanı sorguları için prepared statements kullanın.
Şifreleri karma olarak kullanarakpassword_hash().
Kullanarak şifreleri doğrulayınpassword_verify().
Oturum açtıktan sonra oturum kimliğini yeniden oluşturun.
Hassas formları CSRF belirteçleriyle koruyun.
Korunan eylemlerden önce kullanıcı izinlerini kontrol edin.
Yüklenen dosyaları dikkatlice doğrulayın.
Üretimde teknik hataları göstermeyin.
Üretimde HTTPS kullanın.
PHP’yi, paketleri ve sunucu yazılımını güncel tutun.
Sırları genel dosyaların dışında saklayın.
Önemli veriler için yedeklemeleri kullanın.
Bu kontrol listesi olası tüm güvenlik konularını kapsamamaktadır ancak PHP'ya yeni başlayan her kişinin anlaması gereken en önemli temelleri kapsamaktadır.
PHP Güvenliği Gerçek Projelerde Nasıl Çalışır?
Gerçek uygulamalarda güvenlik kavramları bir arada kullanılmaktadır. Örneğin, bir oturum açma sistemi girişi doğrular, kullanıcıyı bulmak için prepared statements'yu kullanır, parola karmasını doğrular, oturum kimliğini yeniden oluşturur, oturumda yalnızca kullanıcı kimliğini saklar ve kullanıcıyı korumalı bir kontrol paneline yönlendirir.
<?php
session_start();
$pdo = new PDO(
"mysql:host=localhost;dbname=app;charset=utf8mb4",
"root",
""
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$email = trim($_POST["email"] ?? "");
$password = $_POST["password"] ?? "";
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Invalid login details.";
exit;
}
$statement = $pdo->prepare("SELECT id, name, email, password FROM users WHERE email = :email LIMIT 1");
$statement->execute([
"email" => $email
]);
$user = $statement->fetch(PDO::FETCH_ASSOC);
if (!$user || !password_verify($password, $user["password"])) {
echo "Invalid login details.";
exit;
}
session_regenerate_id(true);
$_SESSION["user_id"] = $user["id"];
header("Location: dashboard.php");
exit;
?>Bu örnek, doğrulamayı, prepared statements'yu, parola doğrulamayı, oturum güvenliğini ve güvenli oturum açma davranışını birleştirir.
Modern PHP Çerçevelerinde Güvenlik
Laravel ve Symfony gibi modern PHP çerçeveleri birçok güvenlik görevi için yerleşik araçlar sağlar. Bunlar, istek doğrulamayı, CSRF korumasını, parola karma işlemini, kimlik doğrulama sistemlerini, yetkilendirme ilkelerini, güvenli oturumları, şablonlardan kaçışı ve veritabanı sorgu oluşturucularını içerir.
Ancak saf PHP’de güvenliği öğrenmek hâlâ önemlidir. Çerçevenin perde arkasında ne yaptığını anlamanıza yardımcı olur ve özel mantık oluştururken daha iyi kararlar vermenizi sağlar.
Örneğin, Laravel, CSRF belirteçleriyle formları otomatik olarak koruyabilir, güvenli yardımcılar kullanarak şifreleri karma hale getirebilir, varsayılan olarak Blade çıkışından kaçabilir ve SQL ekleme risklerini azaltmak için Eloquent veya sorgu oluşturucu bağlamalarını kullanabilir. Ancak geliştiricinin yine de girdiyi doğrulaması, tasarım izinleri vermesi, dosya yüklemelerini koruması ve güvenli olmayan kodlama uygulamalarından kaçınması gerekiyor.
Sonuç
PHP güvenliği her arka uç geliştiricisi için temel bir beceridir. Güvenli uygulamalar, giriş, çıkış, veritabanları, oturumlar, şifreler, dosyalar, hatalar, çerezler ve izinlerin dikkatli bir şekilde ele alınmasını gerektirir.
En önemli uygulamalar arasında girişin doğrulanması, çıkıştan kaçış, prepared statements kullanılması, SQL enjeksiyonuna karşı koruma, XSS'nun önlenmesi, CSRF belirteçlerinin kullanılması, şifrelerin karma hale getirilmesi, oturumların güvenliğinin sağlanması, dosya yüklemelerinin doğrulanması ve üretimdeki teknik hataların gizlenmesi yer alır.
Güvenlik tek bir özellik değildir. Tüm proje boyunca uygulanması gereken sürekli bir alışkanlıktır. Bu PHP güvenlik temellerini anladıktan sonraki adım, güvenli bir oturum açma sistemi, korumalı bir kontrol paneli, güvenli bir file upload formu ve doğrulama ve prepared statements içeren bir CRUD uygulaması oluşturarak pratik yapmaktır.

