Beste mede programmeurs,
Ik ben een site aan het bouwen en ik vroeg me af of ik iets over het hoofd zie wat betreft de beveiliging van alles. Volgens mij heb ik aan de meeste dingen wel gedacht maar ik vroeg me af of jullie nog iets weten waar ik nog even naar zou moeten kijken.
Hoe het nu in elkaar zit:
Allereerst heb ik in mijn PHP applicatie een database class geschreven die uiteraard helemaal PDO is daarnaast gaan alle queries eerst door de PDO prepareer heen waardoor ik er al een deel uitfilter.
Daarnaast begint het natuurlijk bij de inputs op de site al, deze worden allemaal door een class heen gehaald die de XSS filter moet voorstellen. Dit bij elkaar lijkt al een sterke basis lijkt mij?
Dan het opslaan van de userdata in de database allereest genereer ik als de user zich registreert een random id met
EDIT:
Als de user ingelogt is word er een cookie aangemaakt met daarin een random session id deze word op elke pagina uiteraard gecontroleerd en deze is ook IP gebaseerd. simpel: veranderd de gebruiker van IP dan is deze gewoon weer uitgelogd
Als laatste is de hele site secure en heb ik een SSL certificaat met Uitgebreide validatieprocedure waardoor dus ook de adresbalk groen word.
Dan heb ik even een vraag over brute force attacks. Deze ga je niet tegen maar hoe kun je deze als beste afhandelen? Ik heb er een heel groot stuk over gelezen maar kom er niet helemaal uit.
Eerst had ik het plan om een gebruiker na 5 verkeerde inlogpogingen te emailen met daarin dat er iemand probeert in te loggen via zijn account. mocht hij dat zelf zijn is er niks aan de hand maar is het iemand anders ja dan? aan die gebruiker kan je niks vragen, maar wel netjes om hem te informeren leek me.
Mocht hij nog 5 keer proberen in te loggen met verkeerde gegevens dan word zijn account geblokkeerd en krijgt hij een mailtje met daarin een activatie code om het weer ongedaan te maken. Maar als de brute force attacker dan dat heel vaak bij verschillende gebruikersnamen doet zijn alle gebruikers straks geblokkeerd ook niet echt de beste oplossing leek mij.
Toen mijn volgende redenering. Als ik nou het IP gebaseerd oppak en ik blokkeer de IP adress die vaak achter elkaar proberen in te loggen voor een bepaalde tijd, dan kan ik in ieder geval die aanval stopppen. mm ook geen nut want je ziet dat een brute force attack meestal vanaf verschillende IP adressen tegelijk komt.
Toen heb ik erover nagedacht om het over een andere boeg te gooien, stel een gebruiker probeert 5x in te loggen en heeft dan nog steeds niet het juiste password dan geef je mee dat de pagina laadtijd langer duurt en na 10 inlogpogingen nog langer etc etc. Maar uiteindelijk stop je hier geen aanval mee? Want ip gebaseerd kun je die inlogpogingen niet opslaan als het ip steeds wijzigt en per gebruiker heeft het ook geen zin als de aanvaller steeds van username veranderd. daarnaast heeft die data in een cookie opslaan ook niet veel zin want deze kunnen ze ook steeds weggooien.
Mijn vraag aan jullie is, denk ik te moeilijk of zie ik echt iets over het hoofd? 1 ding is zeker ik wil in ieder geval wel een vorm van brute force preventie toevoegen. Maar is dan de enige methode die overblijft toch simpel de lettertjes en cijfertjes overtikken van een plaatje? Niet heel erg gebruiksvriendelijk lijkt mij... een Facebook of google heeft dat ook niet, aan de andere kant hendelen zij die extra requests makkelijk natuurlijk
Graag zou ik even horen wat jullie meningen in deze zijn, en of ik ergens een validatie of lek over het hoofd zie!
Bedankt alvast
Ik ben een site aan het bouwen en ik vroeg me af of ik iets over het hoofd zie wat betreft de beveiliging van alles. Volgens mij heb ik aan de meeste dingen wel gedacht maar ik vroeg me af of jullie nog iets weten waar ik nog even naar zou moeten kijken.
Hoe het nu in elkaar zit:
Allereerst heb ik in mijn PHP applicatie een database class geschreven die uiteraard helemaal PDO is daarnaast gaan alle queries eerst door de PDO prepareer heen waardoor ik er al een deel uitfilter.
Daarnaast begint het natuurlijk bij de inputs op de site al, deze worden allemaal door een class heen gehaald die de XSS filter moet voorstellen. Dit bij elkaar lijkt al een sterke basis lijkt mij?
Dan het opslaan van de userdata in de database allereest genereer ik als de user zich registreert een random id met
PHP: filename
Dan maak ik hier een sha512 hash van welke me salt moet voorstellen. Hierna gebruik ik dezelfde methode om het password te encrypten gecombineerd met uiteraard de salt.1
| rand() |
PHP: filename
1
2
3
4
| $salt = hash('sha512', rand()); $password = $input->process($_POST['password']); $passwordenc = hash('sha512', $password . $salt); |
EDIT:
Als de user ingelogt is word er een cookie aangemaakt met daarin een random session id deze word op elke pagina uiteraard gecontroleerd en deze is ook IP gebaseerd. simpel: veranderd de gebruiker van IP dan is deze gewoon weer uitgelogd
Als laatste is de hele site secure en heb ik een SSL certificaat met Uitgebreide validatieprocedure waardoor dus ook de adresbalk groen word.
Dan heb ik even een vraag over brute force attacks. Deze ga je niet tegen maar hoe kun je deze als beste afhandelen? Ik heb er een heel groot stuk over gelezen maar kom er niet helemaal uit.
Eerst had ik het plan om een gebruiker na 5 verkeerde inlogpogingen te emailen met daarin dat er iemand probeert in te loggen via zijn account. mocht hij dat zelf zijn is er niks aan de hand maar is het iemand anders ja dan? aan die gebruiker kan je niks vragen, maar wel netjes om hem te informeren leek me.
Mocht hij nog 5 keer proberen in te loggen met verkeerde gegevens dan word zijn account geblokkeerd en krijgt hij een mailtje met daarin een activatie code om het weer ongedaan te maken. Maar als de brute force attacker dan dat heel vaak bij verschillende gebruikersnamen doet zijn alle gebruikers straks geblokkeerd ook niet echt de beste oplossing leek mij.
Toen mijn volgende redenering. Als ik nou het IP gebaseerd oppak en ik blokkeer de IP adress die vaak achter elkaar proberen in te loggen voor een bepaalde tijd, dan kan ik in ieder geval die aanval stopppen. mm ook geen nut want je ziet dat een brute force attack meestal vanaf verschillende IP adressen tegelijk komt.
Toen heb ik erover nagedacht om het over een andere boeg te gooien, stel een gebruiker probeert 5x in te loggen en heeft dan nog steeds niet het juiste password dan geef je mee dat de pagina laadtijd langer duurt en na 10 inlogpogingen nog langer etc etc. Maar uiteindelijk stop je hier geen aanval mee? Want ip gebaseerd kun je die inlogpogingen niet opslaan als het ip steeds wijzigt en per gebruiker heeft het ook geen zin als de aanvaller steeds van username veranderd. daarnaast heeft die data in een cookie opslaan ook niet veel zin want deze kunnen ze ook steeds weggooien.
Mijn vraag aan jullie is, denk ik te moeilijk of zie ik echt iets over het hoofd? 1 ding is zeker ik wil in ieder geval wel een vorm van brute force preventie toevoegen. Maar is dan de enige methode die overblijft toch simpel de lettertjes en cijfertjes overtikken van een plaatje? Niet heel erg gebruiksvriendelijk lijkt mij... een Facebook of google heeft dat ook niet, aan de andere kant hendelen zij die extra requests makkelijk natuurlijk
Graag zou ik even horen wat jullie meningen in deze zijn, en of ik ergens een validatie of lek over het hoofd zie!
Bedankt alvast
[ Voor 3% gewijzigd door sebasmac op 14-09-2013 19:06 ]