Vragen over login PHP
Ben zelf namelijk al een tijdje bezig met een login-systeem voor een klant.
Ik heb als encryptie sha1 gebruikt met salt, verder kijkt hij van welke pagina je komt en vergelijkt hij een hidden form_id met een sessie zodat je niet (zomaar) via een ander formulier kan inloggen.
Overigens maakt het script gebruik van PDO waardoor Sql-injection niet meer mogelijk is (geloof ik).
Als je bent ingelogd word er een willekeurige Sha1 hash gegenereerd en in een column gezet van de gebruiker die op dat moment wil inloggen. Verder worden er dus geen sessies of cookies aangemaakt die gebruikersgegevens bevatten.
Nou is mijn vraag aan jullie of alle bovenstaande dingen (plus misschien een SSL-verbinding) genoeg is om de basis te vormen voor het inlogsysteem. En of jullie nog tips hebben qua beveiliging?
Alvast bedankt voor jullie reacties!
Quote:
Verder worden er dus geen sessies of cookies aangemaakt die gebruikersgegevens bevatten.
Volgens mij heb je een sessie systeem gemaakt die een sessie aanmaakt, toch?
Waaraan herkend jou systeem een gebruiker dan? Je systeem zal onderscheid moeten kunnen maken tussen gebruikers. Volgens mij kan dit alleen maar met cookies of een variabele in de querystring (bijvoorbeeld: site.nl?sid=4835843758).
Edit:
Cookies zijn niet onveilig, volgens mij kun je ook niet Internet bankieren zonder cookies. Wel moet je er voorzorgen dat mensen die een cookie gestolen hebben door je systeem worden ondekt.
Dit kun je doen door een sessie te koppelen aan het IP adres en/of browser naam van de gebruiker. (Die de sessie gemaakt heeft) Met daarboven op nog HTTPS en je hebt een redelijk veilig sessie systeem.
Cookies zijn niet onveilig, volgens mij kun je ook niet Internet bankieren zonder cookies. Wel moet je er voorzorgen dat mensen die een cookie gestolen hebben door je systeem worden ondekt.
Dit kun je doen door een sessie te koppelen aan het IP adres en/of browser naam van de gebruiker. (Die de sessie gemaakt heeft) Met daarboven op nog HTTPS en je hebt een redelijk veilig sessie systeem.
Gewijzigd op 30/03/2011 19:39:26 door Martijn B
Van PDO moet je wel prepared statements gebruiken.
@Karl Mooi, dat had ik namelijk al ^^ Toch bedankt voor je reactie ;)
setcookie heeft nog een $httponly argument. Die kan je op 'true' zetten zodat het niet via Javascript (cross-site scripting) kan worden uitgelezen. Misschien nog beperken tot één subdomein (alleen www) zodat lekken in eventuele andere subdomeinen om wat voor reden dan ook niet bij de cookies kunnen (iemand die prutst met je DNS records, een lekke phpmyadmin ergens in een subdomein etc)
Maak het mensen juist niet extreem moeilijk om ingelogd te blijven (dus geen trucjes die de name van het input-element iedere keer veranderen om zo automatisch invullen te blokkeren) of te korte sessie-tijden want door dat soort dingen gaan mensen juist makkelijkere wachtwoorden e.d. gebruiken.
En let op je wachtwoord-vergeten procedure. De meeste accounts worden volgens mij nog steeds gehackt door iemands "geheime vraag" te raden :)
@Jelmer Oke allemaal hele handige informatie, ga ik zeker naar kijken ;) En over die geheime vraag: Ik weet nog niet hoe ik dat precies ga doen. Misschien een link naar de betreffende e-mail voor password-reset? Nog iets om over na te denken in ieder geval :) Tevens heb ik op dit moment iets anders bedacht om automatisch invullen te blokkeren, leek mij namelijk vrij handig aangezien je wachtwoord anders letterlijk in het input veldje staat (niet dat andere mensen er iets mee kunnen) maar toch...