formulier dynamisch opbouwen met echo

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jimmy Godin

Jimmy Godin

08/10/2011 17:32:47
Quote Anchor link
Hallo,

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
 
PHP hulp

PHP hulp

08/11/2024 15:48:41
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/10/2011 17:48:32
Quote Anchor link
gewoon de action atribute niet opgeven dan gaat de browser er vanuit dat ie in hetzelfde script moet 'posten'
 
Jimmy Godin

Jimmy Godin

08/10/2011 17:58:39
Quote Anchor link
Inderdaad maar het moet toch ook kunnen zoals ik het wil?

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
 
- Mark -

- Mark -

08/10/2011 18:08:40
Quote Anchor link
Als je enkele quotes gebruikt dan hoef je de dubbele niet te escapen.

PHP_SELF is trouwens niet veilig. Ik zou het gewoon uit typen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

    echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';

?>
 
Jimmy Godin

Jimmy Godin

08/10/2011 18:13:13
Quote Anchor link
ok het werkt, bedankt, wat bedoel je precies met typen? Gewoon login.php laten staan?

thanks!
 
Ward van der Put
Moderator

Ward van der Put

08/10/2011 19:17:40
Quote Anchor link
Zoals Mark al terecht zegt, is $_SERVER['PHP_SELF'] bijzonder onveilig. Je login is te hacken met bijvoorbeeld de URL:

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/10/2011 19:38:17
Quote Anchor link
Wat ik al zei :-)
Daarnaast heb ik de gewoonte om te checken op $_SERVER['HTTP_REFERRER'] om XSS te voorkomen.
 
Obelix Idefix

Obelix Idefix

08/10/2011 20:17:01
Quote Anchor link
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
 
Ward van der Put
Moderator

Ward van der Put

08/10/2011 20:22:52
Quote Anchor link
Nee, dat is inderdaad niet betrouwbaar. Laten we script kiddies niet te wijs maken, maar er zijn simpele tools waarmee je alle request headers kunt vervalsen. Zoals de PHP Manual ook zegt: "This is set by the user agent."

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/10/2011 20:51:31
Quote Anchor link
Zelfs ik leer nog op mijn oude dag, hahaha
Ik vraag me wel af in welke browsers het mogelijk is om dat te veranderen, want die moeten onmiddelijk verboden worden.
 
Ward van der Put
Moderator

Ward van der Put

08/10/2011 20:57:04
Quote Anchor link
Ger, je hebt er niet eens een browser voor nodig: het kan zelfs met PHP zelf, dus daarmee is de cirkel mooi rond...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/10/2011 21:08:40
Quote Anchor link
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
 
Jimmy Godin

Jimmy Godin

09/10/2011 10:15:39
Quote Anchor link
Dag Ward, wat is nu de conclusie? Laat ik de action gewoon weg? Want in jouw boek gebruik je op p. 462 (Beveiliging) $_SERVER['SCRIPT_NAME']...is dit veiliger dan PHP_SELF op heeft het er niets mee te maken??

groeten

Jimmy
 
Ward van der Put
Moderator

Ward van der Put

09/10/2011 10:39:04
Quote Anchor link
Ik zou action="" met een lege string gebruiken. Als je het attribuut action weglaat, krijg je namelijk ongeldig XHTML; bij HTML5 is het wél toegestaan. Het hangt er dus maar van af.

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.
 
Aad B

Aad B

09/10/2011 10:49:24
Quote Anchor link
Ger van Steenderen op 08/10/2011 21:08:40:
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.