Rumah  >  Artikel  >  Java  >  Penyahserikatan dan pencegahan kerentanan muat naik fail berniat jahat di Java

Penyahserikatan dan pencegahan kerentanan muat naik fail berniat jahat di Java

WBOY
WBOYasal
2023-08-09 14:01:481532semak imbas

Penyahserikatan dan pencegahan kerentanan muat naik fail berniat jahat di Java

Penyahserialisasian dan pencegahan kerentanan muat naik fail berniat jahat di Java

Pengenalan:
Dengan perkembangan Internet, isu keselamatan rangkaian telah menjadi semakin ketara, dan beberapa serangan kerentanan biasa ialah kerentanan penyahserilan.keterdedahan fail berniat jahat Artikel ini akan menumpukan pada prinsip kedua-dua kelemahan ini dan cara mencegahnya, serta menyediakan beberapa contoh kod.

1. Prinsip Kerentanan Deserialisasi
Di Java, pensirilan dan penyahserikan boleh digunakan untuk mencapai penyimpanan objek yang berterusan. Pensirian ialah proses menukar objek kepada aliran bait, manakala penyahsiran ialah proses menukar aliran bait kepada objek semula. Walau bagaimanapun, proses penyahserikatan mempunyai risiko keselamatan, dan penyerang berniat jahat boleh melaksanakan kod sewenang-wenangnya dengan membina data bersiri berniat jahat.

Sebab kerentanan penyahserikatan ialah apabila kelas disirikan, sifat, kaedah dan gelagat berkaitannya disimpan dalam strim bait bersiri. Semasa proses penyahserialisasian, mesin maya Java cuba memulihkan aliran bait ke dalam objek. Penyerang boleh mencetuskan kelemahan dalam program dan melaksanakan kod yang tidak dibenarkan dengan membina data bersiri tertentu.

Untuk menunjukkan contoh kelemahan penyahserialisasian, berikut ialah contoh mudah:

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializeExample {
    public static void main(String[] args) {
        try {
            FileInputStream fileIn = new FileInputStream("malicious.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            Object obj = in.readObject();
            in.close();
            fileIn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Dalam contoh di atas, kami membaca objek daripada fail bernama "malicious.ser". Walau bagaimanapun, jika penyerang membina fail "malicious.ser" berniat jahat yang mengandungi kod hasad, kod hasad akan dilaksanakan semasa penyahserilan.

Begini cara untuk melindungi daripada kelemahan penyahserialisasian:

  1. Jangan terima data bersiri daripada sumber yang tidak dipercayai, hanya terima data daripada sumber yang boleh dipercayai.
  2. Jangan gunakan mekanisme pensirilan lalai, tetapi gunakan kaedah pemprosesan penyahsirilan tersuai.
  3. Lakukan pengesahan input untuk penyahserikatan dan hanya terima data yang mematuhi format yang dijangkakan.

2. Prinsip Kerentanan Muat Naik Fail Berniat jahat
Kerentanan muat naik fail berniat jahat bermakna penyerang memuat naik fail berniat jahat ke pelayan dan memintas sekatan keselamatan melalui antara muka muat naik fail yang sah. Setelah fail hasad berjaya dimuat naik, penyerang boleh melaksanakan kod hasad dengan mengakses fail tersebut.

Sebab kerentanan muat naik fail berniat jahat ialah apabila ramai pembangun melaksanakan fungsi muat naik fail, mereka biasanya hanya mengesahkan sambungan fail, tetapi tidak mengesahkan kandungan dan jenis fail. Penyerang boleh mengubah suai sambungan fail atau menyamarkan fail untuk memintas mekanisme pengesahan. Setelah fail ini diterima dan disimpan oleh pelayan, penyerang boleh melaksanakan kod hasad dengan mengakses fail yang dimuat naik.

Berikut ialah contoh muat naik fail mudah:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart) {
            try {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> items = upload.parseRequest(request);
                for (FileItem item : items) {
                    if (!item.isFormField()) {
                        String fileName = item.getName();
                        File uploadedFile = new File("upload/" + fileName);
                        item.write(uploadedFile);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Dalam contoh di atas, kami menggunakan perpustakaan Apache Commons FileUpload untuk melaksanakan muat naik fail. Walau bagaimanapun, kod ini tidak mengesahkan jenis dan kandungan fail yang dimuat naik, membenarkan penyerang memuat naik fail berniat jahat.

Kaedah untuk mencegah kelemahan muat naik fail berniat jahat adalah seperti berikut:

  1. Lakukan pengesahan ketat fail yang dimuat naik, termasuk jenis fail dan kandungan.
  2. Gunakan nama fail yang dijana secara rawak untuk mengelakkan penyerang meneka nama fail.
  3. Simpan fail yang dimuat naik dalam direktori akar bukan Web untuk menghalang akses terus.

Kesimpulan:
Kerentanan penyahserialisasian dan kelemahan muat naik fail berniat jahat ialah dua risiko keselamatan biasa dalam program Java. Dengan mengukuhkan pengesahan proses penyahserikatan dan proses muat naik fail, kami boleh menghalang kelemahan ini dengan berkesan. Pembangun harus sentiasa memberi perhatian kepada isu keselamatan siber dan mengemas kini pengetahuan mereka dengan kerap untuk memastikan kod dan pengguna mereka selamat.

Atas ialah kandungan terperinci Penyahserikatan dan pencegahan kerentanan muat naik fail berniat jahat di Java. 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