Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Strategi pertahanan serangan CSRF dan kaedah pelaksanaan

Strategi pertahanan serangan CSRF dan kaedah pelaksanaan

WBOY
WBOYasal
2023-08-10 18:49:061250semak imbas

Strategi pertahanan serangan CSRF dan kaedah pelaksanaan

Strategi pertahanan serangan CSRF dan kaedah pelaksanaan

Dengan pembangunan berterusan teknologi rangkaian, risiko keselamatan rangkaian juga telah meningkat. Serangan pemalsuan permintaan merentas tapak (CSRF) telah menjadi salah satu ancaman utama yang dihadapi oleh aplikasi Internet semasa. Artikel ini akan memperkenalkan prinsip asas serangan CSRF, serta kaedah pertahanan yang biasa digunakan, dan seterusnya menerangkan kaedah pelaksanaannya, dengan contoh kod yang berkaitan.

  1. Prinsip serangan CSRF

Serangan CSRF menggunakan sesi yang disahkan pengguna untuk melakukan operasi berniat jahat. Penyerang mendorong pengguna untuk mengklik pautan berniat jahat atau melawati tapak web berniat jahat, menyebabkan mereka menghantar permintaan palsu tanpa pengetahuan mangsa. Apabila pengguna log masuk ke tapak web yang dipercayai dan berjaya disahkan, penyemak imbas akan secara automatik membawa bukti kelayakan identiti yang sepadan apabila menghantar permintaan, membenarkan penyerang menyamar sebagai pengguna dan menghantar permintaan untuk melakukan operasi berniat jahat.

  1. Strategi Pertahanan

(1) Pengesanan Asal Yang Sama

Pengesanan asal asal ialah salah satu cara biasa untuk mempertahankan diri daripada serangan CSRF dengan membandingkan sama ada sumber dan alamat sasaran permintaan itu kepada nama domain yang sama. Pengesahan dilakukan pada bahagian pelayan, dan jika nama domain sumber dan nama domain sasaran tidak konsisten, permintaan itu ditolak.

Kod contoh:

@RequestMapping("/transfer")
public String transferMoney(HttpServletRequest request) {
    String origin = request.getHeader("Referer");
    String target = request.getServerName();
    
    if(!origin.equals(target)) {
        return "Illegal Request";
    }
    
    // 业务逻辑处理...
    return "Transfer Successful";
}

(2) Tambah Token CSRF

Menambah Token CSRF juga merupakan salah satu kaedah pertahanan yang biasa digunakan. Apabila pelayan mengembalikan halaman HTML, ia menjana Token unik dan membenamkannya dalam bentuk atau menghantarnya kepada klien sebagai kuki. Apabila borang diserahkan, Token dihantar ke pelayan. Pelayan mengesahkan sama ada token sepadan dan menolak permintaan jika ia tidak sepadan.

Kod sampel:

@RequestMapping("/transfer")
public String transferMoney(HttpServletRequest request, 
        @RequestParam("csrfToken") String csrfToken) {
    
    HttpSession session = request.getSession();
    String storedToken = (String) session.getAttribute("csrfToken");
    
    if (!csrfToken.equals(storedToken)) {
        return "Invalid Token";
    }
    
    // 业务逻辑处理...
    return "Transfer Successful";
}

(3) Permintaan segerak dan tak segerak

Permintaan tak segerak menggunakan teknologi seperti AJAX untuk menghantar permintaan ke pelayan tanpa menyegarkan halaman, yang menjadikan serangan CSRF sukar dihalang. Oleh itu, untuk permintaan yang melibatkan operasi sensitif, sebaiknya gunakan permintaan segerak supaya sesi yang lebih dipercayai dapat diwujudkan dengan pelayan.

  1. Kaedah pelaksanaan

(1) Sahkan sumber permintaan dan tambahkan pengesanan asal yang sama

Dalam perkhidmatan hujung belakang, dengan mendapatkan medan Perujuk pengepala permintaan, tentukan sama ada permintaan itu sah berdasarkan logik latar belakang. Jika sumber permintaan tidak konsisten dengan sasaran, permintaan itu ditolak.

Contoh kod:

@RequestMapping("/transfer")
public String transferMoney(HttpServletRequest request) {
    String origin = request.getHeader("Referer");
    String target = request.getServerName();
    
    if(!origin.equals(target)) {
        return "Illegal Request";
    }
    
    // 业务逻辑处理...
    return "Transfer Successful";
}

(2) Tambah Token CSRF

Apabila menghantar halaman HTML ke bahagian hadapan, hasilkan Token unik dan benamkannya dalam borang atau hantar kepada pelanggan sebagai kuki. Apabila bahagian hadapan menyerahkan permintaan, ia menghantar Token kepada pelayan, dan pelayan mengesahkan sama ada Token sepadan untuk menentukan kesahihan permintaan itu.

Kod contoh:

@RequestMapping("/transfer")
public String transferMoney(HttpServletRequest request, 
        @RequestParam("csrfToken") String csrfToken) {
    
    HttpSession session = request.getSession();
    String storedToken = (String) session.getAttribute("csrfToken");
    
    if (!csrfToken.equals(storedToken)) {
        return "Invalid Token";
    }
    
    // 业务逻辑处理...
    return "Transfer Successful";
}
  1. Ringkasan

Serangan CSRF ialah kaedah serangan yang biasa dan berbahaya, tetapi keselamatan aplikasi boleh dipertingkatkan melalui beberapa strategi pertahanan yang berkesan. Artikel ini memperkenalkan dua kaedah pertahanan biasa, iaitu pengesanan asal dan menambah Token CSRF, dan juga menyediakan kod sampel untuk kaedah pelaksanaan. Apabila membangunkan aplikasi, kita harus memilih strategi pertahanan yang sesuai berdasarkan situasi tertentu dan melaksanakannya dengan betul untuk memastikan keselamatan data pengguna.

Atas ialah kandungan terperinci Strategi pertahanan serangan CSRF dan kaedah pelaksanaan. 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