Rumah  >  Artikel  >  Kerentanan "Pemeriksaan Timbunan".

Kerentanan "Pemeriksaan Timbunan".

WBOY
WBOYke hadapan
2024-02-22 12:46:06455semak imbas

Editor PHP Yuzai hari ini membawakan anda Soal Jawab Java tentang kerentanan "pemeriksaan timbunan". Dalam proses pembangunan perisian, semakan timbunan ialah kelemahan keselamatan biasa yang boleh dieksploitasi dengan mudah oleh penggodam untuk melakukan serangan berniat jahat. Melalui format Soal Jawab artikel ini, kami akan memberi anda pemahaman yang mendalam tentang definisi, prinsip dan kaedah pencegahan kelemahan pemeriksaan timbunan, membantu anda melindungi keselamatan sistem perisian anda dengan lebih baik.

Kandungan soalan

Saya perlu menghantar kata laluan kepada panggilan. Jika saya melakukan ini

byte[] datasourcepasswddecoded = base64.getdecoder().decode(datasourcepasswdencoded);
string datasourcepasswd = new string(datasourcepasswddecoded);
hikaridatasource.setpassword(datasourcepasswd);

Apabila fortify mengimbas kod ini, dilaporkan bahawa kod tersebut mempunyai kerentanan "pemeriksaan timbunan" kerana memberikan kata laluan kepada rentetan.

fortify tidak akan merungut tentang kod asal:

hikaridatasource.setpassword(env.getproperty("spring.datasource.password"));

Walaupun env.getproperty() mengembalikan rentetan.

fortify mengesyorkan:

private JPasswordField pf;
...
final char[] password = pf.getPassword();
// use the password
...
// erase when finished
Arrays.fill(password, ' ');

Tetapi bagaimana untuk menggunakan char[] sebagai kata laluan apabila fungsi menjangkakan rentetan?

Penyelesaian

Ya... Pengekodan Base64 kata laluan tidak melindungi sama sekali. Mana-mana penggodam dengan separuh otak tahu cara mengenal pasti dan menyahkod base64. Jadi "barang base64 pelik" anda tidak membantu.

Tetapi sebaliknya, pengimbas kerentanan anda menunjukkan masalah yang agak sukar untuk dieksploitasi dan mungkin tidak dapat diselesaikan.

Pada satu ketika dalam aplikasi (bergantungannya atau di suatu tempat) kata laluan akan ditukar kepada Java String ...因为某些 API 需要 String。此时,无论扫描器是否告诉您,您都存在“堆检查”漏洞。例如,如果数据源使用 JDBC,则需要将该密码作为参数传递给 DriverManager.connect 调用。 connect Terdapat 3 lebihan beban... tetapi semuanya memerlukan lulus kata laluan sebagai rentetan teks yang jelas. Menyelesaikan masalah ini adalah tidak praktikal.

(Nampaknya, apa yang dipanggil pembetulan yang dicadangkan oleh Fortify jelas tidak berfungsi. Dan ia tidak perasan bahawa panggilan anda kepada setPassword(env.getProperty("spring.datasource.password")) hanyalah "buruk" untuk apa yang sedang anda lakukan. Ia adalah "keselamatan prestasi".. .)

Penyelesaian yang paling praktikal ialah memberitahu pengimbas bahawa ini adalah "positif palsu". Kemudian ambil langkah untuk menghalang penggodam daripada melampirkan penyahpepijat, menyemak RAM, pembuangan teras, menukar cakera, dsb., dan mencari timbunan untuk objek String yang mungkin mewakili kata laluan.

Terdapat juga penyelesaian "jahat" yang memerlukan Stringmenghancurkan melalui pengabstrakan jenis objek dan mengatasi tatasusunan sandarannya. Tetapi pendekatan ini rapuh.

    Perwakilan
  • String 的表示形式在 Java 的生命周期中已更改多次,每次更改都可能会破坏您的 String telah berubah berkali-kali sepanjang hayat Java, dan setiap perubahan boleh memecahkan kod liputan
  • anda.
  • String 的后备数组会与其他 StringDalam sesetengah kes, tatasusunan sandaran
  • dikongsi dengan objek
  • lain, dan memusnahkan tatasusunan sandaran akan merosakkan objek tersebut. String可能已被复制或插入到其他 String
  • Terdapat masalah dengan mencari semua kes di mana kata laluan

mungkin telah disalin atau dimasukkan ke dalam objek lain.

🎜 🎜Melainkan anda berurusan dengan 🎜maklumat sulit🎜, ini adalah (IMO) di atas. Jika anda mengendalikan maklumat sulit, sila selamatkan platform anda sebelum mengambil langkah ini. (Dan jangan bergantung pada perisian pengimbasan keselamatan yang bodoh untuk audit keselamatan!) 🎜

Atas ialah kandungan terperinci Kerentanan "Pemeriksaan Timbunan".. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam