Artikelen » Server-Side scripting » Artikel
PHP Beveiliging
18-06-2009 20:59
Beveiliging
Als je een website wil maken, dan is het belangrijk om alles goed te beveiligen. Al helemaal met programmeertalen zoals PHP. In deze tutorial/artikel ga ik uitleggen hoe je je source/website goed kan beveiligen.
HTML voorkomen
Als eerst beginnen we met de simpele HTML bug, deze maakt het mogelijk om HTML te gebruiken, als gebruikersnaam, reactie in het forum, enzovoort. Wat erg vervelend is is als mensen <noscript> gaan gebruiken want dan werkt uw website niet meer zoals het zou moeten echter zijn er veel gevaarlijkere dingen te doen als "de hacker" HTML kan gebruiken. Een voorbeeld is om bijvoorbeeld door JavaScript de inhoud van een cookie naar zijn/haar e-mail te laten sturen waardoor ze jou cookie kunnen HiJacken. Maar goed, we weten nu het probleem, maar hoe lossen we het op?
Nou daar heeft PHP een hele handige functie voor genaamt htmlspecialchars() of htmlentities(). Eigenlijk is het het beste om het overal te doen waar een gebruiker (Lid of Teamlid) zelf iets in kan voeren. Hieronder ziet u een klein voorbeeldje van een stukje PHP die htmlspecialchars() gebruikt.
Als je nou <noscript> in zou sturen zou de htmlspecialchars() van de < en > een: < en > maken, de gebruiker ziet een < maar de HTML ziet < staan en maakt er dus geen <noscript> van, maar: <noscript> waardoor het niet de HTML code <noscript> uitvoert. Het verschil tussen htmlspecialchars & htmlentities is dat htmlentities alles omzet naar HTML en de htmlspecialchars functie alleen de: &, ", ', < , > omzet naar HTML.
De database
Wij zouden graag gegevens op willen slaan in een database, maar hoe kan dit zo veilig mogenlijk? Simpel het allerveiligst zijn prepared statements gebruiken (PDO & MySQLi) maar niet iedereen beheersen die talen, de veel meer voorkomende database connectie die in PHP door velen worden gebruikt is de verouderde: MySQL connectie. Ook hier geld weer, alles wat door de gebruiker (Lid of Teamlid) naar de database gestuurd word moet je zien als NIET veilig. Hoe gaan we dit dan oplossen? Simpel voor de verouderde MySQL connectie bestaan er 2 functies voor, mysql_real_escape_string (mysql_escape_string bestaat ook maar ik raad de mysql_real_escape_string aan) & addslashes, ze werken in prenciepe allebei goed, echter raad ik de mysql_real_escape_string aan. Hoe gaan we deze gebruiken?
Hieronder ziet u een stukje PHP script waarin u een voorbeeld ziet:
Door dit op deze manier te gebruiken voorkom je dat ze SQL injections doen. Maar hoe werken prepared statements dan? Ik zal hieronder de PDO prepared statement functie gebruiken:
De prepared statement functie gebruik uit zichzelf al een soort van mysql_real_escape_string(). Als je een van die functies gebruikt vergeet dan niet om alle \" weer terug te zetten naar ", Ook daar heeft PHP een hele handige functie voor genaamt: stripslashes(), dus stel je voor je haal kolom op met een $txt = mysql_fetch_assoc, dan doe je dit:
HiJacken
In het begin vermelde ik dat het mischien mogelijk zou zijn om je cookies/sessies te HiJacken. Wat is HiJacken nou eigenlijk? Nou simpel gezegt is het het stelen van een cookie/sessie en je voordoen als de persoon van wie die cookie/sessie eigenlijk is. Maar nu natuurlijk de hoofd-vraag hoe voorkom je dat? Ikzelf los dat altijd op door zodra iemand inlogt het IP in de database te zetten en dan elke keer als iemand een pagina bezoek kijken of de inhoud van dat cookie bij het IP in de database bij elkaar horen. Ook werk ik met een hash zodat ook de cookie bug weg is. Wat bedoel ik met de cookie bug? Simpel bij sommige website?%u20AC%u2122s staat in het cookie jou lid id, als je die met een add-on van firefox of programma veranderd naar het id van de eigenaar (meestal 1) en dan druk je refresh en dan zit je op de eigenaar zijn account. En met een hash gaat dat niet werken. Hieronder ziet u een voorbeeld van hoe u eventueel uw cookie beveiliging zou kunnen doen:
Het kan zijn dat ik iets vergeten ben (dat ik idee heb ik ook) maar ik heb even geen idee wat.
Let op!: Dit artikel mag niet zonder toestemming van de auteur Jasper (webdam-x) op een andere website worden geplaatst
Met vriendelijke groet,
Jasper G.
Als je een website wil maken, dan is het belangrijk om alles goed te beveiligen. Al helemaal met programmeertalen zoals PHP. In deze tutorial/artikel ga ik uitleggen hoe je je source/website goed kan beveiligen.
HTML voorkomen
Als eerst beginnen we met de simpele HTML bug, deze maakt het mogelijk om HTML te gebruiken, als gebruikersnaam, reactie in het forum, enzovoort. Wat erg vervelend is is als mensen <noscript> gaan gebruiken want dan werkt uw website niet meer zoals het zou moeten echter zijn er veel gevaarlijkere dingen te doen als "de hacker" HTML kan gebruiken. Een voorbeeld is om bijvoorbeeld door JavaScript de inhoud van een cookie naar zijn/haar e-mail te laten sturen waardoor ze jou cookie kunnen HiJacken. Maar goed, we weten nu het probleem, maar hoe lossen we het op?
Nou daar heeft PHP een hele handige functie voor genaamt htmlspecialchars() of htmlentities(). Eigenlijk is het het beste om het overal te doen waar een gebruiker (Lid of Teamlid) zelf iets in kan voeren. Hieronder ziet u een klein voorbeeldje van een stukje PHP die htmlspecialchars() gebruikt.
Code | Selecteer Alles![]() |
|---|
|
Als je nou <noscript> in zou sturen zou de htmlspecialchars() van de < en > een: < en > maken, de gebruiker ziet een < maar de HTML ziet < staan en maakt er dus geen <noscript> van, maar: <noscript> waardoor het niet de HTML code <noscript> uitvoert. Het verschil tussen htmlspecialchars & htmlentities is dat htmlentities alles omzet naar HTML en de htmlspecialchars functie alleen de: &, ", ', < , > omzet naar HTML.
De database
Wij zouden graag gegevens op willen slaan in een database, maar hoe kan dit zo veilig mogenlijk? Simpel het allerveiligst zijn prepared statements gebruiken (PDO & MySQLi) maar niet iedereen beheersen die talen, de veel meer voorkomende database connectie die in PHP door velen worden gebruikt is de verouderde: MySQL connectie. Ook hier geld weer, alles wat door de gebruiker (Lid of Teamlid) naar de database gestuurd word moet je zien als NIET veilig. Hoe gaan we dit dan oplossen? Simpel voor de verouderde MySQL connectie bestaan er 2 functies voor, mysql_real_escape_string (mysql_escape_string bestaat ook maar ik raad de mysql_real_escape_string aan) & addslashes, ze werken in prenciepe allebei goed, echter raad ik de mysql_real_escape_string aan. Hoe gaan we deze gebruiken?
Hieronder ziet u een stukje PHP script waarin u een voorbeeld ziet:
Code | Selecteer Alles![]() |
|---|
|
Door dit op deze manier te gebruiken voorkom je dat ze SQL injections doen. Maar hoe werken prepared statements dan? Ik zal hieronder de PDO prepared statement functie gebruiken:
Code | Selecteer Alles![]() |
|---|
|
De prepared statement functie gebruik uit zichzelf al een soort van mysql_real_escape_string(). Als je een van die functies gebruikt vergeet dan niet om alle \" weer terug te zetten naar ", Ook daar heeft PHP een hele handige functie voor genaamt: stripslashes(), dus stel je voor je haal kolom op met een $txt = mysql_fetch_assoc, dan doe je dit:
Code | Selecteer Alles![]() |
|---|
|
HiJacken
In het begin vermelde ik dat het mischien mogelijk zou zijn om je cookies/sessies te HiJacken. Wat is HiJacken nou eigenlijk? Nou simpel gezegt is het het stelen van een cookie/sessie en je voordoen als de persoon van wie die cookie/sessie eigenlijk is. Maar nu natuurlijk de hoofd-vraag hoe voorkom je dat? Ikzelf los dat altijd op door zodra iemand inlogt het IP in de database te zetten en dan elke keer als iemand een pagina bezoek kijken of de inhoud van dat cookie bij het IP in de database bij elkaar horen. Ook werk ik met een hash zodat ook de cookie bug weg is. Wat bedoel ik met de cookie bug? Simpel bij sommige website?%u20AC%u2122s staat in het cookie jou lid id, als je die met een add-on van firefox of programma veranderd naar het id van de eigenaar (meestal 1) en dan druk je refresh en dan zit je op de eigenaar zijn account. En met een hash gaat dat niet werken. Hieronder ziet u een voorbeeld van hoe u eventueel uw cookie beveiliging zou kunnen doen:
Code | Selecteer Alles![]() |
|---|
|
Het kan zijn dat ik iets vergeten ben (dat ik idee heb ik ook) maar ik heb even geen idee wat.
Let op!: Dit artikel mag niet zonder toestemming van de auteur Jasper (webdam-x) op een andere website worden geplaatst
Met vriendelijke groet,
Jasper G.
Omg, hier @ CP wordt me hele artikel verpest door jullie zogenaamde goeie beveiliging
2009-08-02 02:07:35
Oja
Ik zou ook nog even strip_tags(); uitleggen.
Dit kan je beter gebruiken, i.p.v. htmlspecialchars(); en mysql_real_escape_string();
Lars
Ik zou ook nog even strip_tags(); uitleggen.
Dit kan je beter gebruiken, i.p.v. htmlspecialchars(); en mysql_real_escape_string();
Lars
2010-06-01 20:28:26

