sql >> Database >  >> RDS >> Mysql

Wat is de juiste en veilige manier om een ​​gebruiker ingelogd te houden? koekjes? sessie? PHP &&MYSQL

Laat me je dit eerst vertellen. Niets is 100% veilig. Niets is luchtdicht en niets is heilig. Als een aanvaller voldoende gemotiveerd is, zal hij elke verdediging aan de serverzijde doorbreken (tenzij je HTTPS gebruikt, wat een ander verhaal is).

U kunt cookies gebruiken, maar cookies zijn zeer kwetsbaar en kunnen gemakkelijk worden gewijzigd. Sla nooit privégegevens of toegangsniveaus op in een cookie. Omdat het gemakkelijk kan worden gestolen/aangepast door een aanvaller.

Sessies zijn ook niet 100% veilig. De sessie-ID, die de server gebruikt om de client te identificeren, wordt op twee manieren verzonden. een $_GET variabele (slecht), of een cookie (beter, maar nog steeds behoorlijk slecht). Dit betekent dat als je bent ingelogd als beheerder, via een onbeveiligde wifi, een ervaren aanvaller (en met bekwaam bedoel ik een pr0 haxx0r die een eenvoudige HTTP-sniffer heeft gedownload) gemakkelijk je SESSIE-ID kan stelen. En zonder uw wachtwoord te krijgen, zal de server de aanvaller ten onrechte als u identificeren en hem alle toegang verlenen die u mogelijk heeft/had.

Dus wat te doen? Sessies zijn in de meeste gevallen veilig. Adviseer uw gebruikers om niet in te loggen op een onbeveiligd netwerk (bussen, internetcafés, etc.). Als u wilt dat uw gebruikersautorisatie in de loop van de tijd blijft bestaan, is een cookie vereist. Ik gebruik meestal een systeem met 2 cookies als ik dat nodig heb:

userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)

Dan heb ik iets om tegen te matchen, en de details van de gebruiker zijn niet onthuld.

Maar zoals ik al zei, aan het eind van de dag, als je echt ECHT je gebruikers wilt beveiligen, hierboven voor al het andere dat in dit antwoord is geschreven, zorg dan voor HTTPS.



  1. (-) streepje gebruiken in mysql-tabelnaam

  2. Services met ontbrekende/niet-beschikbare afhankelijkheden

  3. Wat zijn databasebeperkingen?

  4. Hoe een transactie opnieuw proberen na een impasse met Doctrine?