formulier dynamisch opbouwen met echo
Ik probeer een formulier op te bouwen met echo:
Volgende code werkt:
echo "<form method=\"post\" action=\"login.php\">\n";
maar nu wil ik in bovenstaande regel "login.php" vervangen door $_SERVER['PHP_SELF'] maar dit wil maar niet lukken...
Wie weet raad?
Bedankt!
Jimmy
gewoon de action atribute niet opgeven dan gaat de browser er vanuit dat ie in hetzelfde script moet 'posten'
echo "<form method=\"post\" action=\"$_SERVER[\'PHP_SELF\']\">\n";
geeft een foutmelding:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
PHP_SELF is trouwens niet veilig. Ik zou het gewoon uit typen.
thanks!
http://www.example.net/login.php/<script>alert('Gehackt!')</script>
Probeer het maar eens, je zult schrikken :(
Nu is dit een onschuldige alert, maar zó is de login gevoelig voor cross-site scripting (XSS). Het <script>...</script>-fragment is gemakkelijk uit te breiden tot iets dat bijvoorbeeld gebruikersnamen en wachtwoorden afvangt.
Veiliger is een lege action="" of action gewoon weglaten.
Daarnaast heb ik de gewoonte om te checken op $_SERVER['HTTP_REFERRER'] om XSS te voorkomen.
Ger van Steenderen op 08/10/2011 19:38:17:
Daarnaast heb ik de gewoonte om te checken op $_SERVER['HTTP_REFERRER'] om XSS te voorkomen.
http://php.net/manual/en/reserved.variables.server.php :
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
Leg me dan eens uit hoe je dan controleert, want lijkt niet betrouwbaar
De referrer controleren is daarmee echter nog niet waardeloos. Je kunt deze oplossing rekenen tot de rubriek: "Baat het niet, het schaadt ook niet." Als de referrer namelijk wél is ingesteld en de referrer níét gelijk is aan de huidige host, is er iets mis.
Ik vraag me wel af in welke browsers het mogelijk is om dat te veranderen, want die moeten onmiddelijk verboden worden.
Ger, je hebt er niet eens een browser voor nodig: het kan zelfs met PHP zelf, dus daarmee is de cirkel mooi rond...
Ward van der Put op 08/10/2011 20:57:04:
Ger, je hebt er niet eens een browser voor nodig: het kan zelfs met PHP zelf, dus daarmee is de cirkel mooi rond...
???
wat heeft dat voor effect op het resultaat in de browser?
Gewijzigd op 08/10/2011 21:09:14 door Ger van Steenderen
groeten
Jimmy
Wat je ook nog kunt doen, is een /login/index.php in een aparte directory plaatsen en daarna action="./" gebruiken in die index.php. Dat geeft je iets meer vrijheid en flexibiliteit wanneer je het inlogformulier later wilt kunnen toevoegen aan andere webpagina's, want dan kun je overal action="/login/" gebruiken.
Klein technisch voordeel van een aparte directory is daarnaast dat je een eventueel cookie voor automatisch inloggen vervolgens kunt beperken tot die ene directory.
Ger van Steenderen op 08/10/2011 21:08:40:
???
wat heeft dat voor effect op het resultaat in de browser?
Ward van der Put op 08/10/2011 20:57:04:
Ger, je hebt er niet eens een browser voor nodig: het kan zelfs met PHP zelf, dus daarmee is de cirkel mooi rond...
???
wat heeft dat voor effect op het resultaat in de browser?
Sommigen zijn niet geinteresseerd in het resultaat in de browser, dat is het punt. Om bijvoorbeeld een check op de user-agent (browser) te blokkeren gebruik ik op de linux commandline wget --user-agent=blabla --nocookies http://www.exapmle.com/en dan nog wat parameters. Het geheel in een script met loopje en je hebt hack script les 1
Gewijzigd op 09/10/2011 10:50:05 door Aad B