Koks yra geriausias būdas įgyvendinti „prisiminti mane“ svetainėje?

Noriu, kad mano svetainėje būtų žymės >

Be to, ar yra įprastų klaidų, užtikrinančių, kad šis slapukas nesuteikia saugumo pažeidžiamumo, kuris galėjo būti išvengtas išlaikant „prisiminti mane“ funkciją?

463
29 окт. pateikė Eddie Deyo 29 spalis 2008-10-29 00:09 '08 0:09 2008-10-29 00:09
@ 4 atsakymai

Patobulinta nuolatinė slapukų versija prisijungimui

Galite naudoti šią strategiją, aprašytą čia kaip geriausią praktiką (2006 m.) Arba atnaujintą strategiją, aprašytą čia (2015 m.):

  • Kai vartotojas sėkmingai prisijungia naudodamas parinktį Prisiminti mane, be standartinių seanso valdymo slapukų, vartotojas yra pateikiamas
slapukas prisijungti . Registracijos slapuką sudaro serijos ID ir raktas . Serija ir simbolis yra neidentifikuoti atsitiktiniai skaičiai iš pakankamai didelės erdvės. Abu yra saugomi kartu duomenų bazės lentelėje, žyma išjungta (sha256 yra gerai). Kai vartotojas, kuris nėra registruotas vartotojo, apsilanko svetainėje ir pristato prisijungimo slapuką, serijos identifikatorius peržiūrimas duomenų bazėje .
  • Jei yra serijos identifikatorius , o simbolinis maišelis atitinka tos serijos identifikatoriaus maišą, vartotojas laikomas autentišku . Sukuriamas naujas raktas, naujasis žetonų rinkinys yra saugomas senojo įrašo viršuje, o vartotojui išduodamas naujas slapukas (jis gali pakartotinai naudoti serijos identifikatorių) ).
  • Jei serija yra, bet simbolis nesutampa, manoma, kad tai yra vagystė . Vartotojas gauna griežtai suformuluotą įspėjimą ir visi naudotojo išsaugoti seansai ištrinami.
  • Jei trūksta naudotojo vardo ir serijos, prisijungimo slapukas ignoruojamas .

Šis požiūris užtikrina apsaugą. Jei kas nors sugeba nutekėti duomenų bazės lentelę, jis nesuteikia užpuolikui atvirų durų, kad jie taptų įsivaizduojami.

485
29 окт. atsakymas pateikiamas splattne 29 oct. 2008-10-29 00:20 '08 ne 0:20 2008-10-29 00:20

Įrašyti naudotojo ID ir raktą. Kai vartotojas grįžta į svetainę, palyginkite šiuos du duomenis su kažkuo nuolatiniu, pavyzdžiui, įrašu duomenų bazėje.

Kalbant apie saugumą, tiesiog nedėkite nieko, kas leistų ką nors keisti slapuką, kad gautų papildomos naudos. Pvz., Neišsaugokite savo vartotojų grupių ar jų slaptažodžio. Viskas, ką galima pakeisti, kad apeitumėte savo saugumą, neturėtų būti saugoma slapuke.

8
29 окт. spalio 29 d. dragonmantanko atsakymas . 2008-10-29 00:17 '08 0:17 2008-10-29 00:17

Išsaugokite savo „UserId“ ir „RememberMeToken“. Kai jie prisijungia prisimindami, kad aš pažymėjau, sukurkite naują „RememberMeToken“ (kuris negalioja jokioms kitoms pažymėtoms mašinoms, kurios prisimena mane).

Kai jie grįžta, pažiūrėkite į juos, prisimink man, ir įsitikinkite, kad „UserId“ atitinka.

7
29 окт. atsakymas pateikiamas jonnii 29 okt. 2008-10-29 00:14 '08 0:14 2008-10-29 00:14

Tiriant reguliarias sesijas, pastebėjau, kad tai tiesiog nėra verta saugumo rizikos. Naudokite jį, jei jums to reikia, bet jūs turite manyti, kad tokia sesija yra tik silpnai atpažinta ir priverčia naują prisijungimą prie nieko, kas gali būti naudinga puolėjui.

Žinoma, priežastis yra ta, kad jūsų slapukai, kuriuose yra jūsų nuolatinė sesija, yra taip lengvai pavogti.

4 būdai, kaip pavogti jūsų slapukus (iš Jens Roland komentaro @splattne puslapyje @splattne pagrįstas jo atsakymu):

  • Priimkite ją per neapsaugotą eilutę (paketų surinkimo / surinkimo sesija)
  • Tiesioginė prieiga prie vartotojo naršyklės (kenkėjiškų programų arba fizinės prieigos prie dėžutės)
  • Perskaitę jį iš serverio duomenų bazės (galbūt SQL injekcija, bet kas gali būti)
  • „XSS“ gedimas (arba panašus kliento pusės naudojimas)
5
21 февр. Atsakymą pateikė Jarl 21 vasaris. 2009-02-21 13:17 '09 13:17 2009-02-21 13:17