Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana PHP bertahan terhadap serangan CSRF

Bagaimana PHP bertahan terhadap serangan CSRF

WBOY
WBOYasal
2023-06-30 19:34:521616semak imbas

Cara menggunakan PHP untuk mempertahankan diri daripada serangan pemalsuan permintaan merentas tapak (CSRF)

Dengan pembangunan dan populariti aplikasi web, isu keselamatan rangkaian menjadi semakin penting. Serangan pemalsuan permintaan silang tapak (CSRF) telah menjadi salah satu kaedah serangan biasa. Serangan CSRF merujuk kepada penyerang yang melakukan beberapa operasi berniat jahat dengan menyamar sebagai permintaan daripada pengguna yang sah, seperti memindahkan wang, menukar kata laluan, dsb. tanpa disedari oleh pengguna. Untuk melindungi pengguna dan aplikasi web, pembangun perlu mengambil langkah untuk mempertahankan diri daripada serangan sedemikian. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mempertahankan diri daripada serangan CSRF.

  1. Fahami prinsip serangan CSRF
    Sebelum bertahan daripada serangan CSRF, kita perlu memahami prinsip serangan. Prinsip serangan CSRF adalah untuk menggunakan maklumat kuki selepas pengguna telah log masuk ke laman web atau aplikasi web lain untuk menyamar permintaan berniat jahat sebagai permintaan yang sah dan menghantarnya ke tapak web atau aplikasi sasaran. Oleh itu, serangan CSRF memerlukan pengguna tapak web sasaran mestilah pengguna sah yang telah lulus pengesahan.
  2. Jana dan sahkan token
    Untuk mempertahankan daripada serangan CSRF, kami boleh menggunakan token untuk mengesahkan kesahihan permintaan. Token ialah rentetan yang dijana secara rawak yang dikaitkan dengan sesi pengguna dan disimpan di bahagian pelayan. Dalam setiap borang, kami menambah medan tersembunyi yang mengandungi nilai token. Apabila pengguna menyerahkan borang, kami perlu mengesahkan bahawa nilai token adalah konsisten dengan nilai yang disimpan di bahagian pelayan. Jika ia tidak konsisten, permintaan tersebut adalah menyalahi undang-undang dan kami boleh menamatkan permintaan atau melakukan pemprosesan lain yang diperlukan.

Berikut ialah contoh kod menggunakan token:

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

// 验证令牌
function verifyToken($token) {
    if(isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token) {
        return true;
    }
    return false;
}

// 在表单中添加令牌字段
function addTokenField() {
    $token = generateToken();
    echo '<input type="hidden" name="csrf_token" value="'.$token.'">';
}
  1. Sahkan sumber permintaan
    Sahkan token sahaja tidak mencukupi kerana penyerang masih boleh mendapatkan token melalui cara lain. Untuk keselamatan tambahan, kami juga boleh mengesahkan asal permintaan. Terdapat dua kaedah untuk mengesahkan sumber permintaan: satu adalah untuk mengesahkan pengepala Perujuk, dan yang lain adalah untuk mengesahkan pengepala Asal.

Contoh kod untuk mengesahkan pengepala Perujuk:

function verifyReferer() {
    if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== false) {
        return true;
    }
    return false;
}

Contoh kod untuk mengesahkan pengepala Asal:

function verifyOrigin() {
    if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] === 'https://www.example.com') {
        return true;
    }
    return false;
}
  1. Tetapkan atribut Kuki dengan sewajarnya
    Untuk meningkatkan keselamatan, kami boleh meningkatkan kesukaran dengan menetapkan serangan atribut CSRF biskut. Sebagai contoh, anda boleh menetapkan kuki untuk dihantar hanya di bawah sambungan HTTPS, mengehadkan skop kuki kepada hanya nama domain semasa, dsb.

Contoh kod untuk menetapkan sifat kuki:

session_set_cookie_params([
    'lifetime' => 86400, // Cookie的有效期为一天
    'path' => '/',
    'domain' => '.example.com',
    'secure' => true, // 仅在HTTPS连接下传输
    'httponly' => true // 仅通过HTTP协议访问
]);
session_start();
  1. Beri perhatian kepada keselamatan log masuk dan log keluar
    Log masuk dan log keluar adalah operasi yang sangat penting dalam aplikasi web, dan keselamatannya juga memerlukan perhatian khusus. Mengendalikan proses log masuk dan log keluar dengan betul boleh mempertahankan secara berkesan daripada serangan CSRF.

Semasa proses log masuk, kami boleh menjana token log masuk dan menyimpannya di bahagian pelayan dan dalam Sesi. Dalam setiap permintaan log masuk, kami perlu mengesahkan kesahihan token untuk memastikan token hanya boleh diperoleh melalui proses log masuk.

Semasa proses log keluar, kami perlu memusnahkan data Sesi yang berkaitan dengan pengguna dan memadamkan ID Sesi. Ini menghalang penyerang daripada mencuri ID Sesi untuk menyamar sebagai pengguna.

Ringkasan:
Serangan CSRF ialah masalah keselamatan rangkaian biasa, tetapi terdapat beberapa langkah yang boleh kita ambil untuk mempertahankan diri daripada serangan ini. Artikel ini memperkenalkan beberapa kaedah menggunakan PHP untuk mempertahankan diri daripada serangan CSRF, termasuk menjana dan mengesahkan token, mengesahkan sumber permintaan, menetapkan atribut kuki dan memberi perhatian kepada keselamatan log masuk dan log keluar. Melalui gabungan penggunaan kaedah ini, kami boleh melindungi keselamatan aplikasi web dan pengguna dengan berkesan.

Atas ialah kandungan terperinci Bagaimana PHP bertahan terhadap 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