Rumah >pembangunan bahagian belakang >tutorial php >Amalan terbaik pengaturcaraan PHP untuk mencegah serangan CSRF

Amalan terbaik pengaturcaraan PHP untuk mencegah serangan CSRF

王林
王林asal
2023-07-05 16:41:291338semak imbas

Amalan Terbaik untuk Pengaturcaraan PHP untuk Mencegah Serangan CSRF

CSRF (Pemalsuan Permintaan Rentas Tapak) ialah kaedah serangan rangkaian biasa Penyerang menyamar permintaan daripada pengguna yang sah untuk membolehkan pengguna melakukan operasi berniat jahat tanpa pengetahuan mereka. Untuk melindungi pengguna dan aplikasi, pembangun perlu mengambil beberapa langkah untuk mencegah serangan CSRF. Artikel ini akan memperkenalkan beberapa amalan terbaik dalam pengaturcaraan PHP untuk mencegah serangan CSRF dan menyediakan beberapa contoh kod.

  1. Gunakan Token CSRF
    Menggunakan token CSRF ialah salah satu cara yang paling biasa dan paling berkesan untuk mencegah serangan CSRF. Token unik dijana setiap sesi pengguna dan disertakan dengan setiap permintaan penyerahan borang. Apabila pelayan memproses permintaan, ia menyemak sama ada token itu sah. Jika token tidak sah, pelayan boleh menolak permintaan atau melakukan tindakan tersuai lain.

Berikut ialah contoh mudah menggunakan token CSRF:

// 生成CSRF令牌
function generateCSRFToken() {
    $token = bin2hex(random_bytes(32));
    $_SESSION['csrf_token'] = $token;
    return $token;
}

// 在表单中包含CSRF令牌
function renderForm() {
    $csrfToken = generateCSRFToken();
    echo '<form action="process.php" method="post">';
    echo '<input type="hidden" name="csrf_token" value="' . $csrfToken . '">';
    echo '<input type="text" name="username">';
    echo '<input type="password" name="password">';
    echo '<input type="submit" value="Submit">';
    echo '</form>';
}

// 处理表单提交请求
function processForm() {
    if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        // 令牌无效,处理错误
        echo 'Invalid CSRF token!';
        return;
    }
    
    // 处理表单提交数据
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    // 执行其他操作
    // ...
}

// 调用函数
renderForm();
processForm();

Dalam kod di atas, fungsi generateCSRFToken bertanggungjawab untuk menjana token CSRF dan menyimpannya dalam sesi pengguna. Fungsi renderForm bertanggungjawab untuk memberikan borang dan memasukkan token CSRF dalam medan tersembunyi. Fungsi processForm bertanggungjawab untuk memproses permintaan penyerahan borang dan mengesahkan kesahihan token CSRF sebelum diproses. generateCSRFToken函数负责生成CSRF令牌,并将其存储在用户的会话中。renderForm函数负责渲染表单,并在隐藏的字段中包含CSRF令牌。processForm函数负责处理表单提交请求,并在处理前验证CSRF令牌的有效性。

  1. 验证请求来源
    除了使用CSRF令牌外,还可以通过验证请求的来源来防止CSRF攻击。在处理请求时,服务器可以检查请求头中的Referer字段,确保请求是来自同一域名的。如果Referer字段为空或不是期望的域名,服务器可以拒绝请求或执行其他自定义操作。

以下是一个简单的验证请求来源的示例:

function processRequest() {
    $expectedDomain = 'https://www.example.com';
    
    if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $expectedDomain) !== 0) {
        // 请求来源无效,处理错误
        echo 'Invalid request source!';
        return;
    }
    
    // 处理请求
    // ...
}

在上述代码中,processRequest函数负责处理请求,并验证请求来源。通过检查请求头中的Referer

    Sahkan sumber permintaan

    Selain menggunakan token CSRF, anda juga boleh menghalang serangan CSRF dengan mengesahkan sumber permintaan. Apabila memproses permintaan, pelayan boleh menyemak medan Perujuk dalam pengepala permintaan untuk memastikan permintaan itu datang daripada nama domain yang sama. Jika medan Perujuk kosong atau bukan nama domain yang diharapkan, pelayan boleh menolak permintaan atau melakukan tindakan tersuai yang lain.

    Berikut ialah contoh mudah untuk mengesahkan sumber permintaan:

    rrreee🎜Dalam kod di atas, fungsi processRequest bertanggungjawab untuk memproses permintaan dan mengesahkan sumber permintaan. Pelayan boleh menentukan kesahihan permintaan dengan menyemak sama ada medan Perujuk dalam pengepala permintaan bermula dengan nama domain yang dijangkakan. 🎜🎜Ringkasan🎜Serangan CSRF menimbulkan ancaman tertentu terhadap keselamatan aplikasi web, tetapi dengan mengamalkan amalan pengaturcaraan yang sesuai, pembangun boleh menghalang serangan sedemikian dengan berkesan. Artikel ini merangkumi dua amalan terbaik dalam pengaturcaraan PHP: menggunakan token CSRF dan mengesahkan asal permintaan. Kaedah ini boleh membantu pembangun meningkatkan keselamatan aplikasi web dan melindungi data pengguna dan privasi. 🎜🎜Tetapi harus diingat bahawa bergantung pada langkah-langkah ini sahaja mungkin tidak sepenuhnya menghalang serangan CSRF. Pembangun juga harus mengambil langkah keselamatan lain, seperti menggunakan HTTPS untuk menyulitkan komunikasi dan menyediakan pengurusan sesi selamat untuk pengguna. Paling penting, pembangun harus sentiasa memberi perhatian kepada maklumat terkini tentang kelemahan keselamatan dan segera membetulkan serta menaik taraf aplikasi untuk mengekalkan keselamatan aplikasi. 🎜

Atas ialah kandungan terperinci Amalan terbaik pengaturcaraan PHP untuk mencegah serangan CSRF. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn