Memahami Kebimbangan Keselamatan strncpy
strncpy, fungsi yang biasa digunakan untuk menyalin rentetan, telah menimbulkan kebimbangan mengenai keselamatannya. Walaupun strncpy membenarkan kawalan ke atas bilangan aksara yang disalin, ia tidak mempunyai ciri penting yang melindungi terhadap eksploitasi tertentu: penamatan NUL.
Kekurangan Penamatan NUL: Gerbang Kerentanan
Penamatan NUL ialah amalan menambahkan aksara nol ' ' di hujung rentetan. Watak ini menandakan penghujung rentetan dan memainkan peranan penting dalam mengekalkan integriti struktur data. Walau bagaimanapun, strncpy tidak menambahkan watak penamat ini secara automatik.
Teknik dan Akibat Eksploitasi
Pertimbangkan senario berikut:
char dest[8] = "Hello"; strncpy(dest, "World", 7);
Dalam contoh ini , dest mempunyai saiz 8 aksara. Apabila strncpy dipanggil, ia menyalin 7 aksara daripada "Dunia" ke dest. Walau bagaimanapun, oleh kerana tiada penamatan NUL, aksara null ' ' tidak dilampirkan pada dest. Ini boleh membawa kepada kelemahan limpahan penimbal, rasuah data dan gelagat program yang tidak dapat diramalkan jika penimbal destinasi tidak mencukupi untuk menampung rentetan sumber.
Kebimbangan Keselamatan Tambahan
Melebihi penimbal melimpah, ketiadaan penamatan NUL dalam strncpy membuka keselamatan lain kebimbangan:
Mengurangkan Risiko
Untuk menangani kebimbangan keselamatan yang berkaitan dengan strncpy, pembangun harus mempertimbangkan menggunakan alternatif selamat, seperti strncpy_s, strlcat, atau strlcpy, yang menguatkuasakan penamatan NUL. Selain itu, adalah penting untuk melaksanakan pengesahan input yang betul untuk memastikan bilangan aksara yang disalin tidak melebihi saiz penimbal destinasi.
Atas ialah kandungan terperinci Mengapakah `strncpy` Dianggap Tidak Selamat, dan Apakah Alternatif Lebih Selamat Wujud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!