Boshqa foydalanuvchilarning SESSID-ning umumiy md5 xeshini qilish xavfsizmi?

Menda php WebSocket serverida ishlaydigan chat ilovasi bor.

Mijoz ulanganda, men unga boshqa foydalanuvchilarning identifikatori va taxallusi bilan ob'ekt yuboraman. Men o'sha identifikatorlarni yuborishim kerak, shunda foydalanuvchi biror narsa aytganida yoki aloqani uzganda va hokazo, boshqa foydalanuvchilar buni kim aytganini yoki uzilganligini va hokazolarni bilishi mumkin.

Server tomonida men SESSID bilan ishlayman, chunki men $_SESSION maʼlumotlardan foydalanaman, lekin, albatta, SESSID roʻyxatini ochiq qila olmayman.

Keyin md5($userId) (bu erda $userId SESSID) dan foydalana olamanmi yoki uning md5 xeshidan sessiyani o'g'irlash mumkinmi?


person Oriol    schedule 11.08.2013    source manba
comment
Nega shunchaki yangi identifikatorni yaratmaslik kerak? Nega u seans identifikatoriga asoslangan bo'lishi kerak?   -  person Gumbo    schedule 12.08.2013
comment
@Gumbo Men buni qila olishimni bilardim, lekin keyin yangi yaratilgan identifikator allaqachon boshqa foydalanuvchiga tegishli ekanligini tekshirishim kerak. md5($userId), $user_Id bilan noyob va md5 xeshi SESSIDdan uzunroq bo'lgani uchun, menimcha, md5($userId) ham noyobdir (md5 xeshi xavfsiz bo'lsa, men buni ham so'rashni rejalashtirgandim).   -  person Oriol    schedule 12.08.2013


Javoblar (2)


Xeshlar xavfsizlik uchun eng yaxshi narsa emas va men buni ko'p hollarda tavsiya etmayman.

Lekin bu holatda farq bor:

Barcha SSID-lar mutlaqo bema'nilikdir (ya'ni ular tasodifiydir), shuning uchun agar siz o'zingizni tayyorlash uchun kerakli tuz qo'shsangiz.

salt.length + $userId.length

32 dan ortiq belgi (xavfsiz tomonda bo'lish uchun uni 128 ta belgidan ko'p qilib qo'ying), xeshni parolini ochishmantiqiy jihatdan imkonsiz. uning shifrini ochish faylni xeshdan qayta yaratishga o'xshaydi! bu mumkin emas

Ishlarni osonlashtirish uchun sizga kerak bo'lgan kod:

function YourNewHashMaker($str)
{
return sha1(md5("Some Random Salt".$str).$str."Another Random Salt!".sha1("This one is too much".$str));
}

Uni shunday foydalaning:

YourNewHashMaker($userId);

Bu erda faqat xavfsizlik teshigi, kimdir sizning kodingizni o'g'irlashi va kamalak jadvalini yasashni boshlashi mumkin, bu Haqiqatdan ham qiyin ish. va boshqa barcha xeshlarning bir xil xavfsizlik teshigi.

Tahrirlash: Esda tutingki, oʻzingiz uchun xeshmeykerlar yaratish uchun qanday gʻoya kerak boʻlishidan qatʼiy nazar, chiqish qatori tasdiqlangan algoritm tomonidan yaratilishi kerakligini unutmang.> Boshqacha qilib aytganda, Funktsiya ichida 'sha1(....)' dan oldin yoki keyin hech narsa qo'shmang.

Umid qilamanki yordam beradi.

person aliqandil    schedule 29.08.2013
comment
Menga yoqdi. Lekin agar men buni yaxshi tushunsam, faylni uning xeshidan qayta ishlab bo'lmaydi, chunki bir xil xeshga ega bo'lgan ko'plab (cheksizlik?) fayllar mavjud. Keyin turli SESSIDlar turli natijalar berishiga ishonchim komilmi? - person Oriol; 29.08.2013
comment
Bu mavjud bo'lishi mumkin bo'lgan barcha mumkin bo'lgan fayllar (cheksizlik) va mavjud bo'lgan fayllar o'rtasidagi farq. Barcha fayllarning umumiy soni 26^32 fayldan kam ekanligi aniq, shuning uchun bir xil xeshli ikkita faylni ko'rish mo''jiza bo'lar edi. Xuddi shu mantiq SSID-lar uchun ham amal qiladi, buning ehtimoli kamroq. - person aliqandil; 29.08.2013

Ushbu kontekstda ishlatiladigan har qanday xesh funksiyasi xavfli bo'ladi va MD5 ni xesh funksiyasi sifatida tanlash kriptografik funksiyalar bilan bog'liq eng yaxshi amaliyotlardan bexabar ekanligingizni anglatadi. MD5 ko'p yillar davomida buzilgan va hech qachon hech narsa uchun ishlatilmasligi kerak. (Hatto sha1 ham xavfsizroq va tezroq, lekin siz ham SHA1 dan foydalanmasligingiz kerak).

Bu borada ko'plab muammolar mavjud. Eng muhimi, bu yorilish uchun ahamiyatsiz bo'lishi kerak, chunki har qanday kichik raqam kamalak jadvalida bo'lishi kerak. Tajovuzkor har bir SESSID qiymatini bilishi kerak. Seans identifikatori sifatida PHP ning session_start() dan foydalaning. Agar sizga token kerak bo'lsa, kriptografik noncedan foydalaning. Agar siz xesh funksiyalarining asoslarini tushunmasangiz, xesh funksiyasidan foydalanmang.

person rook    schedule 11.08.2013
comment
Albatta, hashni tuzlash kamalak stoli masalasini yengib chiqadi. Va MD5 ni singan va har qanday narsa uchun yaroqsiz deb atash biroz ortiqcha. Albatta, qattiq xavfsizlik endi uni yoqtirmasligi mumkin, lekin yuklab olishni tekshirish uchun xesh sifatidami? Rostini aytsam, u erda katta muammolarni ko'rmayapman? - person Nanne; 12.08.2013
comment
OK, men md5 dan foydalanmayman. Lekin faqat bir eslatma: men session_start() dan foydalana olmayman, chunki men har bir mijoz bilan emas, php websocket server skripti bilan seansni boshlayman, shuning uchun men SESSIDs server tomonini saqlashim kerak. - person Oriol; 12.08.2013
comment
@Rook nonce nimani anglatadi? Bu wordreference.com/definition/nonce deb o‘ylamayman. - person Oriol; 12.08.2013