Hoi mensen,
Ik was wat opzoekwerk aan het doen over mogelijk misbruik van speciale tekens die je binnenkrijgt via GET/POST/COOKIE in PHP-scripts. Dat HTML entities misbruikt kunnen worden is me zeer duidelijk. Daarvoor gebruik ik dan ook htmlspecialchars() om deze potentiële gevaren om te zetten naar hun ongevaarlijke HTML-varianten bij weergave.
Maar blijkbaar kunnen GET/POST/COOKIE-variabelen ook misbruikt worden binnen PHP-scripts (dus niet alleen bij de uitvoer naar een HTML pagina). Begrijpelijk, maar ik had er eerlijk gezegd nog niet bij stil gestaan (hoewel ik kritieke variabelen wel door een reguliere expressie sleur).
Nu heb je addslashes() die de potentieel gevaarlijke karakters voorziet van backslashes. Als ik de handleiding goed begrijp dan doet magic_quotes_gpc = ON hetzelfde als addslashes() zodat je dit achterwege kan laten in je scripts. Correct?
Maar er is nog metaquote() waarvan het nut me niet helemaal duidelijk is. Ik snap wel uit de handleiding wat het meer doet dan addslashes(), maar niet waarom. Is het niet voldoende dat enkel ", ', \ en NUL van een extra \ worden voorzien?
Kan iemand gewoon een eenvoudig voorbeeld geven van waar metaquote() noodzakelijk zou zijn om misbruik te vermijden, want volgens mij overzie ik iets...
En dan een tweede bijvraagje. Hoe ver moet je eigenlijk gaan met het 'beveiligen' van de data die je binnenkrijgt via GET/POST/COOKIE? Bijvoorbeeld, ik heb een variabele $go die via GET wordt doorgegeven waaraan ik een door middel van een string een functie toeken die omschrijft wat er moet gebeuren:
...url.php?go=show
In het doel PHP-script wordt deze variabele met $_GET ingelezen en door magic_quotes_gpc voorzien van de nodige backslashes bij misbruik. Die $go variabele wordt enkel in een switch/case structuur gebruikt om te bepalen wat er juist gedaan moet worden. En als er geen case is die overeenkomt dan wordt een foutmelding getoond.
Is het hier noodzakelijk om bijvoorbeeld een metaquote() toe te passen? Of substr() / strlen() om de lengte ervan na te kijken?
Zoals ik het zie is dat overbodig. Als het niet voldoet aan de mogelijkheden in de case-structuur dan geeft ie sowieso een fout. Kan er dan wel misbruik van gemaakt worden?
Ik was wat opzoekwerk aan het doen over mogelijk misbruik van speciale tekens die je binnenkrijgt via GET/POST/COOKIE in PHP-scripts. Dat HTML entities misbruikt kunnen worden is me zeer duidelijk. Daarvoor gebruik ik dan ook htmlspecialchars() om deze potentiële gevaren om te zetten naar hun ongevaarlijke HTML-varianten bij weergave.
Maar blijkbaar kunnen GET/POST/COOKIE-variabelen ook misbruikt worden binnen PHP-scripts (dus niet alleen bij de uitvoer naar een HTML pagina). Begrijpelijk, maar ik had er eerlijk gezegd nog niet bij stil gestaan (hoewel ik kritieke variabelen wel door een reguliere expressie sleur).
Nu heb je addslashes() die de potentieel gevaarlijke karakters voorziet van backslashes. Als ik de handleiding goed begrijp dan doet magic_quotes_gpc = ON hetzelfde als addslashes() zodat je dit achterwege kan laten in je scripts. Correct?
Maar er is nog metaquote() waarvan het nut me niet helemaal duidelijk is. Ik snap wel uit de handleiding wat het meer doet dan addslashes(), maar niet waarom. Is het niet voldoende dat enkel ", ', \ en NUL van een extra \ worden voorzien?
Kan iemand gewoon een eenvoudig voorbeeld geven van waar metaquote() noodzakelijk zou zijn om misbruik te vermijden, want volgens mij overzie ik iets...
En dan een tweede bijvraagje. Hoe ver moet je eigenlijk gaan met het 'beveiligen' van de data die je binnenkrijgt via GET/POST/COOKIE? Bijvoorbeeld, ik heb een variabele $go die via GET wordt doorgegeven waaraan ik een door middel van een string een functie toeken die omschrijft wat er moet gebeuren:
...url.php?go=show
In het doel PHP-script wordt deze variabele met $_GET ingelezen en door magic_quotes_gpc voorzien van de nodige backslashes bij misbruik. Die $go variabele wordt enkel in een switch/case structuur gebruikt om te bepalen wat er juist gedaan moet worden. En als er geen case is die overeenkomt dan wordt een foutmelding getoond.
Is het hier noodzakelijk om bijvoorbeeld een metaquote() toe te passen? Of substr() / strlen() om de lengte ervan na te kijken?
Zoals ik het zie is dat overbodig. Als het niet voldoet aan de mogelijkheden in de case-structuur dan geeft ie sowieso een fout. Kan er dan wel misbruik van gemaakt worden?
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.