Hoşgeldin Misafir

PHP de Random url ile güvenliği artırmak #Konu2

lucifer71

30 May 2024
28 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Merhabalar arkadaşlar öncelikle selamun aleykum bir önceki konumuzda csrf token kullanımını anlattık şimdi ise bir tık daha güvenliği artıracağız

#Öncelikle basit bir csrf token sistemi yapalım

PHP:
<?php
    //BİR ÖNCEKİ KONUMUZDA ANLATMIŞTIM
session_start();

function generateCsrfToken() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
}

function validateCsrfToken($token) {
    return hash_equals($_SESSION['csrf_token'], $token);
}

function getCsrfToken() {
    return $_SESSION['csrf_token'];
}

generateCsrfToken();
?>


#Rastgele Uzantı Oluşturma ve Geçici URL Kullanma

Kod:
<?php
session_start();
include 'csrf.php';

// Rastgele uzantı oluşturacağız arkadaşlar
function generateRandomString($length = 10) {
    return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/62))), 1, $length);
}

// ve saklıyoruz
$randomExtension = generateRandomString();
$_SESSION['randomExtension'] = $randomExtension;
?>//basit bir form

<!DOCTYPE html>
<html>
<head>
    <title>Turkhacks.com</title>
</head>
<body>
    <form action="process_<?php echo $_SESSION['randomExtension']; ?>.php" method="post">
        <input type="text" name="data" placeholder="Veri girin">
        <input type="hidden" name="csrf_token" value="<?php echo getCsrfToken(); ?>">
        <button type="submit">Gönder</button>
    </form>
</body>
</html>

#VE formu yollayalım

PHP:
<?php
session_start();
include 'csrf.php';

$randomExtension = $_SESSION['randomExtension'];

// Gelen uzantının doğru olup olmadığını kontrol edelim
if ($_SERVER['PHP_SELF'] !== "/process_$randomExtension.php") {
    die("Geçersiz URL");
}

// CSRF token kontrolü ile veriyi artıralım
if (!validateCsrfToken($_POST['csrf_token'])) {
    die("Geçersiz CSRF token");
}

// Veriyi dilediğimiz gibi işleyelim
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $data = htmlspecialchars($_POST['data']);
    echo "Alınan veri: " . $data;
}
?>



Bu sayede Csrf token ile gönderdiğimiz form işlemlerini random geçici url ile saldırılardan 1 tık daha korunuyoruz. Post işlemlerinde belirli bir url olmadığı için belirli bir sayfaya saldırı riskini azaltıyoruz