Vragen over login PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

30/03/2011 19:24:27
Quote Anchor link
Ik heb een aantal vragen.
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!
 
PHP hulp

PHP hulp

28/11/2021 02:59:26
 
Martijn B

Martijn B

30/03/2011 19:29:31
Quote Anchor link
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.
Gewijzigd op 30/03/2011 19:39:26 door Martijn B
 

30/03/2011 19:30:13
Quote Anchor link
Van PDO moet je wel prepared statements gebruiken.
 

30/03/2011 21:44:26
Quote Anchor link
@Martijn Elke gebruiker die inlogd krijgt een "nieuwe" hash meegegeven bij het inloggen in de database. Omdat elke hash willekeurig is en als cookie word opgeslagen, kun je checken welke hash bij welke gebruiker hoort ;) Oftewel als admin inlogd word er een hash gegenereerd (bijvoorbeeld: d9729feb74992cc3482b350163a1a010) waarbij er een cookie word aangemaakt ( setCookie('login_hash', 'd9729feb74992cc3482b350163a1a010', $time); ) en waar bij het inloggen dit gebeurt: $db->query("SELECT * FROM login_users WHERE hash='".$_COOKIE['login_hash']."'"); of iets in die richting. Tevens word er dus wel een cookie aangemaakt maar die bevat geen gegevens van de gebruiker, enkel een willekeurig getal.

@Karl Mooi, dat had ik namelijk al ^^ Toch bedankt voor je reactie ;)
 
Jelmer -

Jelmer -

30/03/2011 22:11:36
Quote Anchor link
Je zou die cookie (of specifieker die hash) nog kunnen koppelen aan het ip om in ieder geval session-hijacking moeilijker te maken. (binnen een netwerk kan het nog wel, as je bijvoorbeeld in hetzelfde internet-cafe zit. Maar daar zou https/ssl een goeie beveiliging tegen zijn)

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 :)
 

30/03/2011 22:17:24
Quote Anchor link
@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...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.