JavaRush /Java blogi /Random-UZ /Savol-javob: Nima uchun Java-da parolni String emas, balk...

Savol-javob: Nima uchun Java-da parolni String emas, balki belgilar qatorida saqlash yaxshiroq?

Guruhda nashr etilgan
Java Junior lavozimi uchun intervyuda bunday savolni eshitishingiz mumkin. Ammo mening do'stim texnik rahbar lavozimiga intervyu paytida buni so'rashdi.
Savol-javob: Nima uchun Java-da parolni String emas, balki belgilar qatorida saqlash yaxshiroq?  - 1
Matn ma'lumotlarini saqlash uchun ikkalasi ham String, belgilar qatoridan foydalanish mumkin. Ammo, agar siz hali ham shunga o'xshash vaziyatga duch kelmagan bo'lsangiz, ma'lum bir vazifa uchun bir yoki boshqasini ongli ravishda tanlash qiyin. Biroq, do'stim ta'kidlaganidek, bilan bog'liq har qanday savol Stringodatda o'zgarmaslik ( ) deb nomlangan satrlarning maxsus xususiyatini o'z ichiga oladi Immutableva u intervyuda bundan foydalangan. char []Shunday qilib, keling, parolni saqlash uchun emas, balki dan foydalanishingiz kerak bo'lgan bir nechta sabablarni ko'rib chiqaylik String.

Sabab 1. Satrlar o'zgarmasdir

Java-da satrlar o'zgarmasligi sababli, sizning oddiy matn parolingiz axlat yig'uvchi uni tozalamaguncha xotirada mavjud bo'ladi. Va Stringular takroriy foydalanish uchun ishlatilganligi sababli String pool, parol uzoq vaqt davomida xotirada qolishi ehtimoli juda yuqori, bu umuman xavfsiz emas.
Java String pool - bu maxsus joyda - to'pda joylashgan hovuz yoki ob'ektlar (satrlar) to'plami. Java-dagi string - eng keng tarqalgan ma'lumotlar turlaridan biri. Bu ibtidoiy tur emas, balki ob'ekt, chunki u juda ko'p resurs talab qiladi. Shunday qilib, to'rtta belgidan iborat satrni saqlash uchun siz 56 bayt xotira ajratishingiz kerak. Shuning uchun satrlar, boshqa ob'ektlar kabi, to'pda saqlanadi.
Xotira dumpiga kirish huquqiga ega bo'lgan har bir kishi parolni oddiy matnda topishi mumkin, bu oddiy matndan ko'ra shifrlangan paroldan foydalanish uchun yaxshi sababdir. Satrlar o'zgarmas bo'lgani uchun ularning mazmunini o'zgartirib bo'lmaydi. Har qanday o'zgartirish yangi qatorni yaratadi. Lekin holda char [], siz uning istalgan elementini nol yoki bo'sh belgi bilan almashtirishingiz mumkin. Shunday qilib, parolni belgilar qatorida saqlash parolni ushlab qolish xavfini aniq kamaytiradi.

Sabab 2. Mualliflarning tavsiyalari

Java-ning o'zi (yaxshi, yaratuvchilari orqali, albatta) getPassword ()sinfdan JPasswordFieldqaytib keladigan usuldan foydalanishni tavsiya qiladi char []. Bundan tashqari, eskirgan usulni ham sinab ko'rishingiz mumkin getText (). Nega til mualliflarining tavsiyalariga amal qilmaslik kerak?

Sabab 3. Chop etish

Tur bilan Stringhar doim satrda saqlangan matn jurnal faylida yoki konsolda chop etilishi xavfi mavjud. Shu bilan birga, agar siz dan foydalansangiz Array, siz massiv tarkibini emas, balki uning xotiradagi joylashuvini chop etasiz. Albatta, bu jiddiy sabab emas, lekin baribir u ham mantiqiy.
String strPassword = "Unknown";
char [] charPassword = new char [] {'U', 'n', 'k', 'w', 'o', 'n'};
System.out.println ("String password:" + strPassword);
System.out.println ("char password:" + charPassword);

String password: Unknown
Character password: [C@110b053
Albatta, char []parollarni saqlash uchun Java-dan foydalanish davo emas. Xeshlar bilan ishlash va parollarni oddiy matnda saqlash o'rniga ularni shifrlash kabi xavfsizlik choralarini ko'rishingiz kerak. Va, albatta, autentifikatsiya protsedurasidan so'ng darhol uni xotiradan o'chiring. Javarevisited materiallari asosida
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION